修改Startup
類方法ConfigureServices
以下:ide
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); //註冊接口 services.AddTransient<IDbMovieService, DbMovieService>(); }
controller
構造函數調用以下:函數
public readonly IDbMovieService _DbMovieService; public HomeController(IDbMovieService dbMovieService) { _DbMovieService = dbMovieService; } public IActionResult Index() { _DbMovieService.MovieAnalysis(); return View(); }
瞬時
瞬時(Transient)生命週期服務在它們每次請求時被建立。這一輩子命週期適合輕量級的,無狀態的服務。ui
做用域
做用域(Scoped)生命週期服務在每次請求被建立一次。this
單例
單例(Singleton)生命週期服務在它們第一次被請求時建立(或者若是你在 ConfigureServices
運行時指定一個實例)而且每一個後續請求將使用相同的實例。若是你的應用程序須要單例行爲,建議讓服務容器管理服務的生命週期而不是在本身的類中實現單例模式和管理對象的生命週期。spa
首先,須要從nuget引用相關的包.code
Autofac
對象
Autofac.Extensions.DependencyInjection
(這個包擴展了一些微軟提供服務的類.來方便替換autofac)blog
而後,咱們修改Startup
中的ConfigureServices
代碼以下:接口
public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc(); // Add Autofac var containerBuilder = new ContainerBuilder(); containerBuilder.RegisterModule<AutofacConfig>(); containerBuilder.Populate(services); var container = containerBuilder.Build(); return new AutofacServiceProvider(container); }
AutofacConfig.cs源碼以下:生命週期
using Autofac; using MG.AngleSharp; using MG.AngleSharp.Service; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace MG.Web.AutofacConfig { public class AutofacConfig: Module { protected override void Load(ContainerBuilder builder) { builder.RegisterType<DbMovieService>().As<IDbMovieService>(); } } }
加載程序集註冊方式以下:
public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc(); // Add Autofac var builder = new ContainerBuilder(); builder.Populate(services); //加載程序集 // var assembly = this.GetType().GetTypeInfo().Assembly; var assembly = Assembly.Load("MG.AngleSharp");//獲取MG.AngleSharp 程序集 var baseType = typeof(IDependency);//IDependency 是一個接口 builder.RegisterAssemblyTypes(assembly) .Where(m => baseType.IsAssignableFrom(m) && m != baseType) .AsImplementedInterfaces().InstancePerLifetimeScope(); var container = builder.Build(); return new AutofacServiceProvider(container); }
IDependency
是一個空接口類,用於判斷是否須要註冊該接口。
調用方式推薦使用構造函數方式引用。
獲取bin目錄下全部程序集
//加載程序集 //var assembly1 = this.GetType().GetTypeInfo().Assembly;//獲取當前程序集 var assemblys = AppDomain.CurrentDomain.BaseDirectory; DirectoryInfo theFolder = new DirectoryInfo(assemblys); foreach (var item in theFolder.GetFiles("*.dll")) { var assembly = Assembly.Load(item.Name.Replace(".dll", ""));//加載程序集 var baseType = typeof(IDependency);//IDependency 是一個接口 builder.RegisterAssemblyTypes(assembly) .Where(m => baseType.IsAssignableFrom(m) && m != baseType) .AsImplementedInterfaces().InstancePerLifetimeScope(); }