Autofac的使用

  1. Autofac简介
  2. 基本的使用方式
  3. 如何实现webapi控制器自动注入接口

一、Autofac简介

Autofac是实现依赖注入的类库之一,他可以帮助你实现程序的解耦,所谓“上层模块不应依赖于底层模块,应当依赖于抽象,而不应依赖于细节”,哈哈,咱们说点白话吧,意思就是说顶层的模块不应直接依赖于底层模块以及具体的实现,应当有个抽象层在中间,只知道有什么方法就行, 具体怎么实现,细节不管,这样的好处在于解耦,顶层模块通过接口得到对应实现,不在乎到底是哪个具体对象,只要有这个方法就可以(接口嘛),可以任意更换接口对应实现,而不需要修改代码。

二、基本使用

  • 使用方式如下

首先打开NuGet获取Autofac.Integration.WebApi,获取了之后,引用中会多出如下两个dll库

  1. Autofac.dll(这个非常重要,主要使用它)
  2. Autofac.Integration.WebApi.dll(这个在实现WebApi自动注入时需要)

项目中引入了Autofac的dll库后,我们就可以开始正式使用Autofac了

基础使用
//创建IOC容器构建对象
var builder = new ContainerBuilder();//注册接口与具体实现的对应
builder.RegisterType<DatabaseA>().As<IDataBase>();//创建容器——此时的容器中已有如上注册的映射关系
var container = builder.Build();//通过容器注入接口,得到之前注册的具体实现
var db = container.Resolve<IDataBase>();
一个接口对应多个实现的使用
//创建IOC容器构建对象
var builder = new ContainerBuilder();//注册同一接口对应多个实现,通过Named方法解决,加入关键字
builder.RegisterType<DatabaseA>().Named<IDataBase>("A");
builder.RegisterType<DatabaseB>().Named<IDataBase>("B");//创建容器——此时的容器中已有如上注册的映射关系
var container = builder.Build();//通过容器注入接口+关键字,得到之前注册的具体实现
var dbA = container.ResolveNamed<IDataBase>("A");
var dbB = container.ResolveNamed<IDataBase>("B");

WebApi中,使用Autofac自动注入控制器

跟Unity有所不同,Unity只要创建了正确的容器,在Application_Start中配置一下即可,Unity设置方式如下所示:

//实例化容器,并注册接口对应的资源类
var container = new UnityContainer();
container.RegisterType<IProductRepository, ProductRepository>();
//设置依赖
config.DependencyResolver = new UnityDependencyResolver(container)

到此,发起Webapi请求时,webapi控制器中的接口就会被注入

Autofac的webapi接口自动注入

废话不多说,很简单,如下所示:

//创建容器构建对象
var builder = new ContainerBuilder();//注册接口与实现的对应
builder.RegisterType<DatabaseA>().Named<IDataBase>("A");
builder.RegisterType<DatabaseB>().Named<IDataBase>("B");//这点非常重要:将所有程序集加载进来
Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
//然后调用方法,将程序集中的所有webapi控制器注册到构建对象
builder.RegisterApiControllers(assemblies).PropertiesAutowired();//创建容器——此时的容器中已有如上的注册映射关系,以及所有程序集中的webapi控制器的注册
var container = builder.Build();//设置给依赖关系解析程序
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

此时,WebApi控制器已经可以自动注入接口
Autofac不需要给属性设置Dependency特性,就可自动实现注入

Autofac的基本使用相关推荐

  1. AutoFac使用方法总结:Part I

    utoFac是.net平台下的IOC容器产品,它可以管理类之间的复杂的依赖关系.在使用方面主要是register和resolve两类操作. 这篇文章用单元测试的形式列举了AutoFac的常用使用方法: ...

  2. AutoFac Ioc依赖注入容器

    本文原著:牛毅  原文路径 http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ 理解IOC容器请看下图: 没有使用IOC容器的情况 ...

  3. IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc

    阅读目录: 一. 一个没有使用IoC的例子 二. 当需求发生变动时,非IoC遭遇到的困境 三. 使用IoC彻底解决问题 四. 总结 一.一个没有使用IoC的例子 IoC的全称是Inversion of ...

  4. Autofac 组件、服务、自动装配 《第二篇》

    一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...

  5. autofac 用法总结

    autofac 用法总结 autofac官网: http://autofaccn.readthedocs.io/en/latest/getting-started/index.html autofac ...

  6. .net autofac Web Forms

    autofac.web通常是对Page或用户/自定义控件做属性注入 public class Article:System.Web.UI.Page {public IArticleService Ar ...

  7. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)

    前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)>我们通过如下操作: 创建实体及工具类 创建Re ...

  8. IoC~MVC3+EF+Autofac实现松耦合的系统架构 [转载]

    MVC3+EF+Autofac网上这种文章确实没有,呵呵,今天就写一个,代大家分享! 这个系列的文章将带我们进入一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你 ...

  9. mysql + Fluently NHibernate + WebAPI + Autofac

    MySQL.Fluently NHibernate.WebAPI.Autofac,对我来说每一个都是麻烦疙瘩,现在它们为了一个共同的项目而凑合到一起了.一路磕磕碰碰,现在貌似有了一点眉目. 作为一个步 ...

  10. 分享基于EF6、Unitwork、Autofac的Repository模式设计

    目录 分享基于EF6.Unitwork.Autofac的Repository模式设计 一.实现的思路和结构图 二.Repository设计具体的实现代码 三.Repository设计的具体的使用 四. ...

最新文章

  1. linux c 常用函数
  2. Matplotlib实例教程 | 统计DataFrame中文本长度分布(条形统计图)
  3. 10个典型实用的PHP代码片段
  4. MyBatisPlus3.x代码生成器自定义模板配置
  5. 中文信息处理的主流技术是什么?
  6. 合并K个排序链表—leetcode23
  7. 使用 CliWrap 让C#中的命令行交互举重若轻
  8. 在.NET Core 中收集数据的几种方式
  9. spring mysql 多数据源_spring框架学习【多数据源配置】
  10. 如何用java输出方格_第三章 Java类基础知识作业之(输出5*5数字方格,打印星塔)...
  11. jQuery操作示例
  12. sql limit 子句_SQL按子句排序
  13. 2021,Java最全的分布式面试题合集附答案,共2w字!
  14. 同事:你居然还在用 try catch 处理异常? 有点Low啊
  15. mysql数据迁移性能_百万级MySQL的数据量,该如何快速的完成数据迁移?
  16. idea 导出项目结构树
  17. 遗传算法在TSP中的应用
  18. 【信息技术】【2014.07】交通监控中的车辆跟踪与速度估计
  19. 普通话水平测试用朗读作品60篇-(练习版)
  20. SCLK时钟信号可以高电平有效也可以低电平有效

热门文章

  1. 什么是JAVAweb?
  2. 数据结构|连通图、完全图、无向图、有向图的边数计算问题
  3. 【小技术】数据库显示“远程过程调用失败”怎么办?
  4. echarts-箱线图(盒须图)
  5. 判断字符串是否是数字
  6. [数据分析] RFM分析方法
  7. Android TabLayout基本使用及完美调整指示器位置的技巧
  8. 字节跳动 面试 复盘 回顾 2021 过客局
  9. MxNet系列——how_to——multi_devices
  10. 矩阵理论| 特殊矩阵:Hermite矩阵/共轭对称矩阵