用Autofac替换.net core 内置容器
- 属性注入
- 基于名称的注入
- 子容器
- 自定义生存期管理
- Func<T> 支持
所以可以使用其他第三方IOC容器,如Autofac,下面为学习使用记录
一、首先准备了一个接口和其实现类
public interface ITestService
{string ShowMsg();
}
public class TestService: ITestService
{public string ShowMsg(){return "test123";}
}
二、安装Nuget 包
Autofac
Autofac.Extensions.DependencyInjection
三、在 Startup.ConfigureServices 中配置容器
注:使用第三方容器,Startup.ConfigureServices 必须返回 IServiceProvider。
第一种方式,使用AutofacModule配置文件,原来代码修改为:
public IServiceProvider ConfigureServices(IServiceCollection services)
{services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);// Add Autofacvar containerBuilder = new ContainerBuilder();containerBuilder.RegisterModule<AutofacModule>();containerBuilder.Populate(services);var container = containerBuilder.Build();return new AutofacServiceProvider(container);
}
AutofacModule类如:
public class AutofacModule: Module
{protected override void Load(ContainerBuilder builder){builder.RegisterType<TestService>().As<ITestService>(); //...........}
}
第二种方式
Startup.ConfigureServices如下修改
public IServiceProvider ConfigureServices(IServiceCollection services)
{services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);// Add Autofacvar containerBuilder = new ContainerBuilder();//containerBuilder.RegisterModule<AutofacModule>();
//自动注册该程序集下的所有接口//netcore_autofac 为程序集命名空间//InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例//SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;//InstancePerDependency:默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象;containerBuilder.RegisterAssemblyTypes(Assembly.Load("netcore_autofac")).AsImplementedInterfaces().InstancePerLifetimeScope();containerBuilder.Populate(services);var container = containerBuilder.Build();return new AutofacServiceProvider(container);
}
其他Autofac在.net core 的使用,请参考官方文档:https://docs.autofac.org/en/latest/integration/aspnetcore.html
用Autofac替换.net core 内置容器相关推荐
- .net core 杂记:用Autofac替换内置容器
官方建议使用内置容器,但有些功能并不支持,如下: 属性注入 基于名称的注入 子容器 自定义生存期管理 Func<T> 支持 所以可以使用其他第三方IOC容器,如Autofac,下面为学习使 ...
- 内置哪几种服务容器_ASP.NET CORE 内置的IOC解读及使用
在我接触IOC和DI 概念的时候是在2016年有幸倒腾Java的时候第一次接触,当时对这两个概念很是模糊:后来由于各种原因又回到.net 大本营,又再次接触了IOC和DI,也算终于搞清楚了IOC和DI ...
- ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)...
在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就 ...
- ASP.NET CORE 内置的IOC解读及使用
在我接触IOC和DI 概念的时候是在2016年有幸倒腾Java的时候第一次接触,当时对这两个概念很是模糊:后来由于各种原因又回到.net 大本营,又再次接触了IOC和DI,也算终于搞清楚了IOC和DI ...
- Python之第六章 内置容器 --- 字符串
目录 Python之第六章 内置容器 --- 字符串 1.概念 2.凭借字符串 --- + 3.多行字符串 4.字符串的切片 例 输入员工省份证号,输出出生日期 5.分隔合并字符串 分隔字符串 合并字 ...
- Python之第六章 内置容器 --- 字典(映射)
目录 Python之第六章 内置容器 --- 字典(映射) 1.定义: 2.格式: 3.字典创建示例 4.增加字典元素 5.删除字典 6.字典的访问 7.字典的复制 8.使用get()方法获取指定的 ...
- python学习笔记(07)---(内置容器-字典)
第七章 内置容器(三) 4.字典 (1)概念:字典属于可变序列,使用"键 : 值"(key-value)的方式配对存储数据,类似拼音-汉字的映射关系 (2)格式:dictname ...
- python内置容器--元组,字典与集合
1.4.原组 1.4.1.元组(tuple):将一组不可变的数据序列组合起来形成一个特殊的内置容器 1.4.2元组不允许的操作: 修改,新增元素 删除元素(允许删除整个元组) 所有会对元组内部元素发生 ...
- 如何在Tanzu Cluster中使用vSphere with Tanzu内置容器注册表
vSphere With Tanzu内置了容器注册表功能,只需要在Cluster的Namespace下enable此功能.有关开启和push/pull的内容请参考vSphere with K8S下使用 ...
最新文章
- android 文件读取错误,Android源文件从SD卡读取错误问题,怎么处理
- eclipse 代码提示后面的百分比是什么意思?
- 基于jQuery实现垂直轮播效果
- 【MySQL】MySQL SQL查询语法建议
- pandas写入excel指定行_pandas读写excel文件的基本操作!,详细,教学,Pandas,对
- 6. Observable 和 数组的区别
- python零基础自学教材-python萌新:从零基础入门到放弃
- win7 64位下 memcached安装
- FFmpeg采集树莓派USB摄像头(UVC摄像头)
- 告诉你一个真实的傅里叶
- 互联网公司背后的“深套路”:恶意举报对手,假招聘骗取信息
- 路由与交换技术-18-热备份路由选择协议HSRP
- 2022年第三场直播公告
- 防灌水php,自己借鉴写了个防灌水的函数
- 计算机组成与设计:硬件/软件接口
- i59400f和i510400f打游戏差距大不大
- 51单片机_动态数码管显示
- 日文转换为罗马音_韩语发音和罗马音对照表
- 符合泊松分布的事件模拟到达时间生成
- catia CAA 获取catia版本
热门文章
- QT的QMultiSampleAntiAliasing类的使用
- c语言的32个关键词
- php实现的购物车类实例,PHP实现的购物车类实例_PHP
- c语言程序设计第四版十二五,C语言程序设计/普通高等教育十二五规划教材
- 第十九天:实施定性风险分析
- 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
- 通过移位的方式实现相加算法
- SQL Server 聚集索引 clustered index 非聚集索引Nonclustered Indexes键查找查找Key Lookup执行计划过程详解
- 斯坦福python中文分词stanza
- anacoda里面安装包显示失败_VScode离线安装插件,以及安装插件失败问题