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的貌 ...
随机推荐
- df=df.reset_index(drop=True)
df=df.reset_index(drop=True) ============ df = pd.read_csv('./train_file/train.csv').dropna()df_test ...
- linux----------CentOS的一些除了yum安装以外的基本操作命令。
1.tail -n 5 文件名字 : 查看大型文件的后五行内容 head -n 5 文件名字 : 查看文件的前五行内容 2.ls -lh 可以查看文件大小转换以后 ...
- 【转】福利大放送--不止是Android,Github超高影响力开源大放送,学习开发必备教科书
[福利大放送]不止是Android,Github超高影响力开源大放送,学习开发必备教科书 目录 一.写在前面 1.free-programming-books 2.oh-my-zsh 3.awes ...
- pycharm的断点调试与TODO标记
断点调试的方法: 断点调试在程序比较大的时候调试运用的比较多 点击Pycharm软件右上角绿色三角形右边的小甲鱼图标,点击之后会弹出断点调试的界面 Debug是用来调试bug的 terminal 是终 ...
- Spring Boot:简介
一.概述 Spring Boot 是Java一个开源框架,主要用途是用来创建微服务:可以用来创建独立的.生产的基于Spring的应用程序. Spring Boot 采用默认配置观点,多数Spring ...
- CentOS 7 zabbix添加监控服务器
CentOS 7 yum安装zabbix 设置中文界面 安装环境 CentOS 7 关闭防火墙和SElinux 在被监控端安装zabbix-agent [root@zabbix-agent ~]# ...
- 安卓BLE测试apk
安卓蓝牙测试APP 文件下载:蓝牙测试.apk
- Django数据查询方法总结
__exact 精确等于 like ‘aaa’__iexact 精确等于 忽略大小写 ilike ‘aaa’__contains 包含 like ‘%aaa%’__icontains 包含 忽略大 ...
- Linux的DNS配置2-主从服务器
1.实验背景 之前写了Linux的DNS配置1-DNS入门,其中只用了一台DNS服务器,但一般在大型网络中,都要通过配置辅助DNS服务器可以提高DNS服务的可靠性,本次实验即配置DNS主从服务器 2. ...
- Prometheus监控学习笔记之Prometheus从1.x升级到2.x
详细参考这篇文章 https://cloud.tencent.com/developer/article/1171434 prometheus 2.0于2017-11-08发布,主要是存储引擎进行了优 ...