Autofac IOC框架
ASP.NET Core自带了一个轻量级的IOC容器 但是只提供了最基本的AddXXX方法来绑定实例关系 需要一个一个添加 可以使用其他IOC容器来替换内置的
ABP自带Castle容器
1.安装Nuget包 Autofac 和 Autofac.Extensions.DependencyInjection
2.使用Autofac替换自带的IOC容器
在Startup.cs中如果ConfigureServices方法返回类型是void 改成IServiceProvider
先定义一个容器 public Autofac.IContainer ApplicationContainer { get; private set; }
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//实例化Autofac容器
var builder = new ContainerBuilder();
//将Services中的服务填充到Autofac中
builder.Populate(services);
//新模块组件注册
builder.RegisterModule<AutofacModuleRegister>();
//创建容器接收
var Container = builder.Build();
//这里可以不需要在上面定义ApplicationContainer 这句代码可以不要
//this.ApplicationContainer = Container;
//第三方IOC接管 core内置DI容器
return new AutofacServiceProvider(Container);
AutofacModuleRegister.cs
public class AutofacModuleRegister : Autofac.Module
{
//重写Autofac管道Load方法,在这里注册注入
protected override void Load(ContainerBuilder builder)
{
//找到AutofacMvcDemo程序集中,以Service结尾的类,找到满足的类和实现的接口自动进行注册
builder.RegisterAssemblyTypes(GetAssemblyByName("JcbApplication")).Where(a => a.Name.EndsWith("Service")).AsImplementedInterfaces();
//找到Program类型所在的程序集,以Repository结尾的类,找到满足的类和实现的接口自动进行注册
builder.RegisterAssemblyTypes(GetAssemblyByName("JcbApplication")).Where(a => a.Name.EndsWith("Repository")).AsImplementedInterfaces(); //某个接口有多个实现类 需要特殊的进行手动注册 最后一个参数就是标识 字符串
builder.RegisterType<SqlService>().Named<ISqlService>(typeof(SqlService).Name);
builder.RegisterType<MySqlService>().Named<ISqlService>(typeof(MySqlService).Name); }
/// <summary>
/// 根据程序集名称获取程序集
/// </summary>
/// <param name="AssemblyName">程序集名称</param>
/// <returns></returns>
public static Assembly GetAssemblyByName(String AssemblyName)
{
return Assembly.Load(AssemblyName);
}
}
3.当一个接口有多个实例 使用的时候需要指定
public class HomeController : Controller
{
private IPersonService _personService;
private ISqlService _sqlService;
private ISqlService _mysqlService;
private IComponentContext _componentContext;//Autofac上下文
public HomeController(IPersonService personService, IComponentContext componentContext)
{
this._personService = personService;
this._componentContext = componentContext;
this._sqlService = _componentContext.ResolveNamed<ISqlService>(typeof(SqlService).Name);
this._mysqlService = _componentContext.ResolveNamed<ISqlService>(typeof(MySqlService).Name);
}
public IActionResult Index()
{
var aa = _personService.GetData();
var bb = _sqlService.GetData();
var cc = _mysqlService.GetData();
return View();
}
多种不同的注册方式
https://www.cnblogs.com/bluesummer/p/8875702.html
//注册同一接口的多个实例
https://www.cnblogs.com/wei325/p/9191686.html
Autofac IOC框架的更多相关文章
- .NET领域最为流行的IOC框架之一Autofac
一.前言 Autofac是.NET领域最为流行的IOC框架之一,微软的Orchad开源程序使用的就是Autofac,Nopcommerce开源程序也是用的Autofac. Orchad和Nopcomm ...
- IOC框架之一Autofac
.NET领域最为流行的IOC框架之一Autofac 一.前言 Autofac是.NET领域最为流行的IOC框架之一,微软的Orchad开源程序使用的就是Autofac,Nopcommerce开源程序也 ...
- .Net IOC框架入门之三 Autofac
一.简介 Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个 目的 1.依赖注入的目的是为了解耦. 2.不依赖于具体类,而依赖抽象类或者接口,这叫依赖倒置. 3.控制反转即 ...
- .NET领域最为流行的IOC框架之一Autofac WebAPI2使用Autofac实现IOC属性注入完美解决方案 AutoFac容器初步
.NET领域最为流行的IOC框架之一Autofac 一.前言 Autofac是.NET领域最为流行的IOC框架之一,微软的Orchad开源程序使用的就是Autofac,Nopcommerce开源程 ...
- 依赖反转Ioc和unity,autofac,castle框架教程及比较
1.依赖倒置的相关概念 http://www.cnblogs.com/fuchongjundream/p/3873073.html IoC模式(依赖.依赖倒置.依赖注入.控制反转) 2.依赖倒置的方式 ...
- .Net IOC框架入门之——Autofac
一.简介 Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个 目的 1.依赖注入的目的是为了解耦.2.不依赖于具体类,而依赖抽象类或者接口,这叫依赖倒置.3.控制反转即IoC ...
- 各大主流.Net的IOC框架性能测试比较
Autofac下载地址:http://code.google.com/p/autofac/ Castle Windsor下载地址:http://sourceforge.net/projects/cas ...
- 主流IOC框架测验(.NET)
上一篇中,我简单介绍了下Autofac的使用,有人希望能有个性能上的测试,考虑到有那么多的IOC框架,而主流的有:Castle Windsor.微软企业库中的Unity.Spring.NET.Stru ...
- AutoFac IoC DI 依赖注入
AutoFac IoC DI 依赖注入 记录点点滴滴知识,为了更好的服务后来者! 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌 ...
随机推荐
- Postman代码测试工具如何用?
1. 1)get请求,参数为map时, postman的传参 2)参数为基本数据类型的参数时 postman传参: 3)当参数在接口中动态获取时 postman传参: 2. 1)post请求,参数 ...
- Google word/sheets 常见的使用:
Google Sheets: 1, sheets 里面的单元格设置自动换行: 选中单元格: --> Format --> Text Wrapping --> Wrap(自动换行)/C ...
- CDI services--interceptors(拦截器)
1.拦截器综述 拦截器的功能是定义在Java拦截器规范. 拦截器规范定义了三种拦截点: 业务方法拦截, 生命周期回调侦听, 超时拦截(EJB)方法. 在容器的生命周期中进行拦截 1 2 3 4 pub ...
- 压力(性能)测试及jmeter的使用
github中标注lab3的文档记录了我的详细的实验过程,有关环境搭建.过程理解.实验结果与遇到的问题等,希望可以帮到初学者. 欢迎交流- https://github.com/fogmisty/So ...
- InputStream字节输入流
1.字节输入流——硬盘中数据写出到内存中供解析使用: 根据文件存储原理,8位二进制组成为一个字节,换算后的数值在0-127则查询ASCII码表,其他则查询系统默认表,如简体中文查询GBK表: 2.Fi ...
- Ping 命令实战小结--TCP/IP协议学习
2011-12-22 22:38:49 图1 图2 一,环境说明 硬件连线.PC与2440开发板直接用网线连接. PC的ip地址:192.168.0.107.2440开发板的ip地址:192.168. ...
- react --- 搭建环境
搭建react开发环境的准备工作 1. node.js 稳定版本 2. 安装cnpm,用cnpm代替npm 3. 用yarn替代npm yarn的安装:npm install -g yarn 搭建re ...
- python3 error 机器学习 错误
AttributeError: 'NoneType' object has no attribute 'sqrt' 这个错误其实是因为 plt.scatter(x[:,0],x[:,1],x[:,2] ...
- ColumnStore完整验证指南之安装与启动停止
官方文档https://mariadb.com/kb/en/library/mariadb-columnstore/ 推荐使用最新1.2.x最新版本. 先决条件 yum -y install boos ...
- vue 添加旋转图片 修改css transform 值
//点击放大图片并旋转图片 conponents组建 <template> <!-- 过渡动画 --> <transition name="fade ...