AutoFac实现程序集级别的依赖注入

1、介绍

所谓程序集级别的依赖注入是指接口和实现的依赖不使用配置文件或硬代码实现(builder.RegisterType<UserInfoService>().As<IUserInfoService>();),而是通过名称约定实现依赖注入

2、项目接口及dll

2.1 项目结构(创建MVC3项目)

2.2 UI层需引入的dll(使用nuget引入)

2.2.1 Autofac

2.2.2 Autofac.Integration.Mvc

2.2.3 MyMVC3.Business.IServices

2.2.4 MyMVC3.Modules.IRepository

2.2.5 MyMVC3.Modules.Model

3、依赖注入配置代码(在Global.asax的Application_Start方法中调用)

/// <summary>
      /// 使用AutoFac实现依赖注入
      /// </summary>
      private void autoFac()
      {
          var builder = new ContainerBuilder();
          SetupResolveRules(builder);  //注入

          builder.RegisterControllers(Assembly.GetExecutingAssembly());  //注入所有Controller
          var container = builder.Build();
          DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
      }
private void SetupResolveRules(ContainerBuilder builder)
       {
           //UI项目只用引用service和repository的接口,不用引用实现的dll。
           //如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dll
           var IServices = Assembly.Load("MyMVC3.Business.IServices");
           var Services = Assembly.Load("MyMVC3.Business.Services");
           var IRepository = Assembly.Load("MyMVC3.Modules.IRepository");
           var Repository = Assembly.Load("MyMVC3.Modules.Repository");

           //根据名称约定(服务层的接口和实现均以Service结尾),实现服务接口和服务实现的依赖
           builder.RegisterAssemblyTypes(IServices, Services)
             .Where(t => t.Name.EndsWith("Service"))
             .AsImplementedInterfaces();

           //根据名称约定(数据访问层的接口和实现均以Repository结尾),实现数据访问接口和数据访问实现的依赖
           builder.RegisterAssemblyTypes(IRepository, Repository)
             .Where(t => t.Name.EndsWith("Repository"))
             .AsImplementedInterfaces();
       }

4、各层级间配置构造函数注入

4.1 UserInfoService

private IUserInfoRepository productRepository;
        public UserInfoService(IUserInfoRepository productRepository)
        {
            this.productRepository = productRepository;
            this.AddDisposableObject(productRepository);
        }

4.2 UserInfoService

public IUserInfoService userService;

      public HomeController(IUserInfoService userService)
      {
          this.userService = userService;
          this.AddDisposableObject(userService);
      }

原文地址:https://www.cnblogs.com/sylone/p/9497233.html

时间: 2024-11-03 23:49:53

AutoFac实现程序集级别的依赖注入的相关文章

AutoFac (控制反转IOC 与依赖注入DI)

绝世好文  转:http://blog.csdn.net/fanbin168/article/details/51293218 1 IOC概念(很重要) 项目 先引入AutoFac 和AutoFac MVC两个程序集到项目中 然后我们在MVC(UI层)的App_Start文件夹下创建一个AutoFacConfig.cs类 [csharp] view plain copy using System; using System.Collections.Generic; using System.Li

NET Core源代码通过Autofac实现依赖注入

查看.NET Core源代码通过Autofac实现依赖注入到Controller属性 阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Core 整合Autofac和Castle实现自动AOP拦截]中,我们讲过除了ASP.NETCore自带的IOC容器外,如何使用Autofac来接管IServiceProvider进行依赖注入. 最近老有想法在ASP.NET Mvc Core中实现Controller的属性值的依赖注入,但是找遍了Micros

依赖注入容器-Autofac

介绍一款依赖注入的容器AutoFac,一直非常迷惑依赖注入到底有独特的优势或者好处,感觉如果用策略模式和反射等也是可以实现这个解耦的,不管怎么样还是先来大概了解依赖注入到底是怎么一回事.              首先来看个例子,如果你想要一把锤子你会怎么做?(这个例子是我百度上看到的,觉得挺形象的) 1.自己造,打铁,锻造等. 2.或者你找制造锤子的工厂订购 3.打开淘宝,下单,支付 上面的例子在程序开发中分别有什么不同:第一种方式显而易见非常麻烦,从开发角度看就是高度耦合,导致使用和制造混在

C# MVC IOC、依赖注入

在MVC5中依赖注入,本文介绍通过扫描类型RegisterAssemblyTypes来进行注册 另外还有扫描模块RegisterAssemblyModules来注册 使用Autofac框架进行组件的依赖注入 Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个 先通过Nuget安装程序包 PM> install-package atuofac PM> install-package atuofac.mvc5 一般的做法是设计一个空的IDependency的接口,让所有想要

基于DDD的.NET开发框架 - ABP依赖注入

返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板. ABP的官方网站:http://www.aspnetboilerplate.com ABP官方文档:http://www.aspnetboilerplate.com/Pages/Documents Github上的开源项目:http

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); }

从零开始,搭建博客系统MVC5+EF6搭建框架(2),测试添加数据、集成Autofac依赖注入

一.测试仓储层.业务层是否能实现对数据库表的操作 1.创建IsysUserInfoRepository接口来继承IBaseRepository父接口 1 namespace Wchl.WMBlog.IRepository 2 { 3 public partial interface IsysUserInfoRepository : IBaseRepository<sysUserInfo> 4 { 5 6 } 7 } 2.创建sysUserInfoRepository类继承BaseReposit

WebAPI2使用AutoFac依赖注入完整解决方案。

WebApi2上进行依赖注入,在百度里能搜到的的完整解决方案的文章少之又少,缺胳膊断腿. 和MVC5依赖注入的不同之处,并且需要注意的地方,标记在注释当中.上Global代码: namespace S2S.WebApi { public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { //----AutoFac DI------ var builder = ne

NopCommerce使用Autofac实现依赖注入

NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数注入. NopCommerce将所有和Autofac注入相关的工作都放到了EngineContext中,在Global.asax的Application_Start函数的第一句代码即是: //initialize engine context EngineContext.Initialize(fal