修改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(); }