zoukankan      html  css  js  c++  java
  • .NetCore下使用Autofac做 IOC 容器

    在.NetCore中使用自带的IOC容器 写注入的时候会写很多,如果要自己封装的话也达不到预期的效果,所以这里采用Autofac来时替代 .NetCore自带的容器

    nuget首先引用Autofac.Extensions.DependencyInjection,关联的Autofac包也一起添加上了

    这里我对DI类的生命周期做了一些特性处理

    在.NetCore自带的容器中 有ScopedSingletonTransient,这里就不对这三个区别做介绍了

    我定义了三种特性,对应这三种方式

     public class ScopedDIAttribute : Attribute
        {
        }
    
    public class SingletonDIAttribute : Attribute
        {
        }
    
     public class TransientDIAttribute : Attribute
        {
        }

    那么在代码中怎么来使用Autofac注入这些对应特性的生命周期,代码如下

    在Startup中ConfigureServices中添加代码,并且修改返回值IServicesProvider ,这里我指定了需要扫描的应用程序集,并且为三种特性注入了对应的生命周期

    var builder = new ContainerBuilder();
                builder.Populate(services);
                var _assably = AppDomain.CurrentDomain.GetAssemblies();
                var _needImpl = _assably.Where(c => c.FullName.StartsWith("ExaminationServicesApplication") 
    || c.FullName.StartsWith("ExaminationServicesDomain")
    || c.FullName.StartsWith("ExaminationServicesInfrastructure")).ToArray(); builder.RegisterAssemblyTypes(_needImpl) .Where(t => t.GetCustomAttribute<ScopedDIAttribute>() != null) .AsImplementedInterfaces() .InstancePerLifetimeScope(); builder.RegisterAssemblyTypes(_needImpl) .Where(t => t.GetCustomAttribute<TransientDIAttribute>() != null) .AsImplementedInterfaces() .InstancePerDependency(); builder.RegisterAssemblyTypes(_needImpl) .Where(t => t.GetCustomAttribute<SingletonDIAttribute>() != null) .AsImplementedInterfaces() .SingleInstance(); builder.RegisterDynamicProxy(); this.ApplicationContainer = builder.Build(); return new AutofacServiceProvider(this.ApplicationContainer);

     builder.RegisterDynamicProxy(); 这个是对AspectCore 针对 Autofac 实现AOP的处理

    做完这些我们只需要在对应的实现类中加入对应的特性即可完成注入,不需要在startup里面大量的写 AddScoped了

    [ScopedDI]
        public class DemoRepository :BaseRepository<School>, IDemoRepository
        {
       }
  • 相关阅读:
    李开复:如何设计你的2015年度计划(转)
    深入浅出 Java 多线程(转)
    maven常见问题汇总 专题
    Introduction to the Build Lifecycle
    具体解释EBS接口开发之WIP模块接口
    Shell脚本编程具体解释
    [数字图像处理]图像去噪初步(1)--均值滤波器
    hdu-4302-Holedox Eating-线段树-单点更新,有策略的单点查询
    响应式设计:理解设备像素,CSS像素和屏幕分辨率
    #define
  • 原文地址:https://www.cnblogs.com/liyouming/p/9857421.html
Copyright © 2011-2022 走看看