zoukankan      html  css  js  c++  java
  • .net core中使用autofac进行IOC

    .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
  • 相关阅读:
    9、spring五种scope
    2、数据库四种事务隔离级别
    4、jquery获取servlet值
    3、$.post不执行
    A brief Arch installation in VMware
    Git经验记录
    Windows上virtualenv搭建python开发环境
    no such file django-admin.py
    复制拷贝函数+重载operator=
    Reconfigure CentOS+freeradius+daloradius again
  • 原文地址:https://www.cnblogs.com/LiuNew/p/10604470.html
Copyright © 2011-2022 走看看