.net Core中自带DI是非常简单轻量化的,但是如果批量注册就得扩展,下面使用反射进行批量注册的

 1 public void AddAssembly(IServiceCollection services,string assemblyName)
 2         {
 3             if (!string.IsNullOrEmpty(assemblyName))
 4             {
 5                 var assembly = Assembly.Load(assemblyName);
 6                 var ts = assembly.GetTypes().Where(n => n.IsClass && !n.IsAbstract && !n.IsGenericType).ToList();
 7                 foreach (var item in ts.Where(s => !s.IsInterface))
 8                 {
 9                     var interfaceType = item.GetInterfaces();
10                     if (interfaceType.Length == 1)
11                         services.AddScoped(interfaceType[0], item);
12                     if (interfaceType.Length > 1)
13                         services.AddScoped(interfaceType[1], item);
14                 }
15             }
16         }
View Code

下面是将自带的DI换成AutoFac进行批量DI

(NuGet引入Autofac,Autofac.Configuration,Autofac.Extensions.DependencyInjection)

1 public class AutofacModule : Autofac.Module
2     {
3         //重写Autofac管道Load方法,在这里注册注入
4         protected override void Load(ContainerBuilder builder)
5         {
6             //注册Service中的对象,Service中的类要以Service结尾,否则注册失败
7              builder.RegisterAssemblyTypes(Assembly.Load("CoreDemo")).Where(a => a.Name.EndsWith("Service")).AsImplementedInterfaces();
8         }
9     }
View Code
 1 public IServiceProvider ConfigureServices(IServiceCollection services)
 2         {
 3             services.AddMvc();
 4             services.Configure<ConnectionOptions>(_configuration.GetSection("ConnectionStrings"));
 5 
 6             #region 注册Autofac
 7             //实例化Autofac容器
 8             var builder = new ContainerBuilder();
 9             //将Services中的服务填充到Autofac中
10             builder.Populate(services);
11             //新模块组件注册    
12             builder.RegisterModule<AutofacModule>();
13             //创建容器
14             var Container = builder.Build();
15             //Autofac接管.net core内置DI容器 
16             return new AutofacServiceProvider(Container);
17             #endregion
18         }
View Code

 

posted on 2019-03-26 22:50  cigarlau  阅读(250)  评论(0编辑  收藏  举报