Autofac的基本使用
Autofac的使用
- Autofac简介
- 基本的使用方式
- 如何实现webapi控制器自动注入接口
一、Autofac简介
Autofac是实现依赖注入的类库之一,他可以帮助你实现程序的解耦,所谓“上层模块不应依赖于底层模块,应当依赖于抽象,而不应依赖于细节”,哈哈,咱们说点白话吧,意思就是说顶层的模块不应直接依赖于底层模块以及具体的实现,应当有个抽象层在中间,只知道有什么方法就行, 具体怎么实现,细节不管,这样的好处在于解耦,顶层模块通过接口得到对应实现,不在乎到底是哪个具体对象,只要有这个方法就可以(接口嘛),可以任意更换接口对应实现,而不需要修改代码。
二、基本使用
- 使用方式如下
首先打开NuGet获取Autofac.Integration.WebApi,获取了之后,引用中会多出如下两个dll库
- Autofac.dll(这个非常重要,主要使用它)
- 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的基本使用相关推荐
- AutoFac使用方法总结:Part I
utoFac是.net平台下的IOC容器产品,它可以管理类之间的复杂的依赖关系.在使用方面主要是register和resolve两类操作. 这篇文章用单元测试的形式列举了AutoFac的常用使用方法: ...
- AutoFac Ioc依赖注入容器
本文原著:牛毅 原文路径 http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ 理解IOC容器请看下图: 没有使用IOC容器的情况 ...
- IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc
阅读目录: 一. 一个没有使用IoC的例子 二. 当需求发生变动时,非IoC遭遇到的困境 三. 使用IoC彻底解决问题 四. 总结 一.一个没有使用IoC的例子 IoC的全称是Inversion of ...
- Autofac 组件、服务、自动装配 《第二篇》
一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...
- autofac 用法总结
autofac 用法总结 autofac官网: http://autofaccn.readthedocs.io/en/latest/getting-started/index.html autofac ...
- .net autofac Web Forms
autofac.web通常是对Page或用户/自定义控件做属性注入 public class Article:System.Web.UI.Page {public IArticleService Ar ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)>我们通过如下操作: 创建实体及工具类 创建Re ...
- IoC~MVC3+EF+Autofac实现松耦合的系统架构 [转载]
MVC3+EF+Autofac网上这种文章确实没有,呵呵,今天就写一个,代大家分享! 这个系列的文章将带我们进入一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你 ...
- mysql + Fluently NHibernate + WebAPI + Autofac
MySQL.Fluently NHibernate.WebAPI.Autofac,对我来说每一个都是麻烦疙瘩,现在它们为了一个共同的项目而凑合到一起了.一路磕磕碰碰,现在貌似有了一点眉目. 作为一个步 ...
- 分享基于EF6、Unitwork、Autofac的Repository模式设计
目录 分享基于EF6.Unitwork.Autofac的Repository模式设计 一.实现的思路和结构图 二.Repository设计具体的实现代码 三.Repository设计的具体的使用 四. ...
最新文章
- linux c 常用函数
- Matplotlib实例教程 | 统计DataFrame中文本长度分布(条形统计图)
- 10个典型实用的PHP代码片段
- MyBatisPlus3.x代码生成器自定义模板配置
- 中文信息处理的主流技术是什么?
- 合并K个排序链表—leetcode23
- 使用 CliWrap 让C#中的命令行交互举重若轻
- 在.NET Core 中收集数据的几种方式
- spring mysql 多数据源_spring框架学习【多数据源配置】
- 如何用java输出方格_第三章 Java类基础知识作业之(输出5*5数字方格,打印星塔)...
- jQuery操作示例
- sql limit 子句_SQL按子句排序
- 2021,Java最全的分布式面试题合集附答案,共2w字!
- 同事:你居然还在用 try catch 处理异常? 有点Low啊
- mysql数据迁移性能_百万级MySQL的数据量,该如何快速的完成数据迁移?
- idea 导出项目结构树
- 遗传算法在TSP中的应用
- 【信息技术】【2014.07】交通监控中的车辆跟踪与速度估计
- 普通话水平测试用朗读作品60篇-(练习版)
- SCLK时钟信号可以高电平有效也可以低电平有效