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

原文地址:https://www.cnblogs.com/xiaoguli/p/11259466.html

时间: 2024-08-24 17:07:30

Asp.net Core AutoFac根据程序集实现依赖注入的相关文章

asp.net core 系列之Dependency injection(依赖注入)

这篇文章主要讲解asp.net core 依赖注入的一些内容. ASP.NET Core支持依赖注入.这是一种在类和其依赖之间实现控制反转的一种技术(IOC). 一.依赖注入概述 1.原始的代码 依赖就是一个对象的创建需要另一个对象.下面的MyDependency是应用中其他类需要的依赖: public class MyDependency { public MyDependency() { } public Task WriteMessage(string message) { Console

ASP.NET Core 配置文件(无处不在的依赖注入)

前烟: .NET Core 中取消了以往的 XML 节点配置文件,改用了 *.json 格式. 在 Startup.cs 文件中,构造方法 build appsetting.json 文件, 本文主要对解析配置文件的官方工具类做总结: 一.appsettings.json 文件 在新建的 Core Web 项目中,默认会有一个全局的配置变量:IConfigurationRoot 提供了索引器.GetSection 方法: { "Host": "http://localhost

ASP.NET Core 新建线程中使用依赖注入的问题

问题来自博问的一个提问 .net core 多线程数据保存的时候DbContext被释放 . TCPService 通过构造函数注入了 ContentService , ContentService 的实例依赖了 AppDbContext (继承自 EF Core 的 DbContext).在 TCPService 中通过 Thread.Start 启动了一个新的线程执行了 TCPService 中的 Receive 方法,在 Receive 方法中通过 ContentService 进行保存数

.netCore2.0 程序集DI依赖注入

传统的依赖注入确实简单,但是随着项目的扩展随之而来的问题又来了,因为传统的注入是单个类和接口注入的,加入项目的接口和类增加到了上百个的话,就需要在Startup.cs中复制注入上百次,虽然能解决问题,但是显然有点笨拙. 下面介绍一个程序集DI依赖注入,即通过反射进行文件注入 首先通过反射获取当前程序集 /// <summary> /// 通过程序集的名称加载程序集 /// </summary> /// <param name="assemblyName"&

Asp.Net Core 实现服务的批量注册注入

原文:Asp.Net Core 实现服务的批量注册注入 原文地址:https://www.cnblogs.com/lonelyxmas/p/10317859.html

【ASP.Net MVC3 】使用Unity 实现依赖注入

什么是Unity? Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的耦合设计.松散耦合的应用程序更灵活,更易于维护.这样的程序也更容易在开发期间进行测试.你可以模拟对象,具有较强的具体依赖关系的垫片(轻量级模拟实现),如数据库连接,网络连接,ERP连接,和丰富的用户界面组件.例如,处理客户信息的对象可能依赖于其他对象访问的数据存储,验证信息,并检查该用户是

IoC容器Autofac正篇之依赖注入(六)

依赖注入,这个专业词我们可以分为两个部分来理解: 依赖,也就是UML中描述事物之间关系的依赖关系,依赖关系描述了事物A在某些情况下会使用到事物B,事物B的变化会影响到事物A: 注入,医生通过针头将药物注入到病人体内.注入也就是由外向内注入.灌输一些东西. 综合上面的说明,依赖注入就是A类依赖B类,B类的实例由外部向A注入而不是由A自己进行实例化或初始化. 三种注入方式 一.构造器注入   类A依赖于类B,类A的构造方法中,有一个参数为类B,在new 类A时会从外部为类B传入实例就是构造注入 cl

ASP.NET Web API - 使用 Castle Windsor 依赖注入

示例代码 项目启动时,创建依赖注入容器 定义一静态容器 IWindsorContainer 1 private static IWindsorContainer _container; 在 Application_Start() 中,创建该容器 1 _container = new WindsorContainer(); 调用 Container Install 方法,向容器内注册组件 1 _container.Install(FromAssembly.This()); 该语句会调用整个程序集中

ASP.NET5最佳实践:技术选择+依赖注入+配置文件读写

1.技术选择 页面: html静态页面很好,但模板(代码块)重用怎么办? 再有与后台交互,比如绑定数据又如何办? 模板不能重用,无解.后台交互,无怪乎可以使用js代码.特别现在流行SPA应用,html+angularjs类的框架…… cshtml可以使用Layout页(类似webfroms master模板页),也可以使用ViewsComponets(类似于webfroms web控件) 它使用Razor视图引擎解析,页面甚至可以使用c#语言.和后台交互式很Easy的. 如果说cshtml结构代