注册的Startup类型的ConfigureServices允许返回一个ServiceProvider,这个特性的重要意义在于它使我们可以实现与第三方DI框架(比如Unity、Castle、Ninject和AutoFac等)的集成,这里我们用AutoFac示范
.NetCore默认的DI框架,接口需要一个个的注册
public void ConfigureServices(IServiceCollection services) {
services.AddMvc();
services.AddTransient<IServiceA, ServiceA>();//DI依赖注入的实现 .net core自带的框架
}
Autofac实现批量注册服务-名称注入
NutGet安装Autofac和Autofac.Extension.DependencyInjection
ConfigureServices的void替换成有返回值的ServiceProvider
public IServiceProvider ConfigureServices(IServiceCollection services)
{
//注册Autofac组件 实例化容器
var builder = new ContainerBuilder();
//批量注册程序集
builder.RegisterAssemblyTypes(System.Reflection.Assembly.Load("IService"),//实现类所在的程序集名称
System.Reflection.Assembly.Load("Service"))
.Where(t => t.Name.EndsWith("Service"))//带筛选
.AsImplementedInterfaces()//是以接口方式进行注入,注入这些类的所有的公共接口作为服务
.InstancePerLifetimeScope();//在一个生命周期中,每一次的依赖组件或调用(Resolve())创建一个单一的共享的实例,且每一个不同的生命周期域,实例是不同的
builder.Populate(services);
this.ApplicationContainer = builder.Build();
//第三方IOC接管 core内置DI容器
return new AutofacServiceProvider(this.ApplicationContainer);
}