Asp.net Core AutoFac根据程序集实现依赖注入

Posted xiaoguli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Asp.net Core AutoFac根据程序集实现依赖注入相关的知识,希望对你有一定的参考价值。

一、创建一个专门用于依赖注入的接口(IAutoInject), 所有的服务接口皆继承于此接口

namespace DDD.Domain

    public interface IAutoInject
    
    

  

二、添加服务接口,需要继承IAutoInject

namespace DDD.Domain.Product.Inter

    public interface IProductTypeService : IAutoInject
    
        int Add(ProductType entity);
    

三、添加服务实现类,继承服务接口IProductTypeService

 
namespace DDD.Domain.Product.Impl

    public class ProductTypeService: DBBase , IProductTypeService
    
        public int Add(ProductType entity)
        
           return db.Insertable(entity).ExecuteCommand();
        
    

四、添加依赖注入类

 
namespace CoreTest

    public class AutoFacIoc
    
        public static IContainer Injection(IServiceCollection services)
        
            var builder = new ContainerBuilder();
            //InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例
            //SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;
            //InstancePerDependency:默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象;
 
            //获取IAutoInject的类型
            var baseTypeDomain = typeof(DDD.Domain.IAutoInject);
            //获取所有需要依赖注入的程序集
            //DDD.Domain是服务所在程序集命名空间  
            Assembly assembliesDomain = Assembly.Load("DDD.Domain");
            //自动注册接口
            builder.RegisterAssemblyTypes(assembliesDomain)
                .Where(b => b.GetInterfaces().Any(c => c == baseTypeDomain && b != baseTypeDomain))
                .AsImplementedInterfaces()
                .SingleInstance(); //见上方说明
 
            builder.Populate(services);
            return builder.Build();
        
    

五、再Startup.cs中调用

说明: 需要修改ConfigureServices方法的返回值为 IServiceProvider ; 添加ApplicationContainer 属性

 public IContainer ApplicationContainer  get; private set; 
 public IServiceProvider ConfigureServices(IServiceCollection services)
 
     services.AddMvc();
 
     this.ApplicationContainer = AutoFacIoc.Injection(services);
     return new AutofacServiceProvider(this.ApplicationContainer);
  

六、根据构造函数进行注入

namespace CoreTest.Controllers

public class ProductTypeController : Controller

IProductTypeService productTypeService;
public ProductTypeController(IProductTypeService _productTypeService)

this.productTypeService = _productTypeService;

public IActionResult Add()

ProductType entity = new ProductType()

CreateBy = "",
CreateTime = DateTime.Now
;
int re = productTypeService.Add(entity);

re += productApp.AddProductType(entity);
return Json(re);


本文转自:

https://blog.csdn.net/qq_26900081/article/details/82984010

以上是关于Asp.net Core AutoFac根据程序集实现依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

[Asp.Net Core]Autofac支持配置文件

[Asp.Net Core]Autofac抽象支持AOP

[Asp.Net Core]Autofac抽象支持AOP

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)