官方建议使用内置容器,但有些功能并不支持,如下:
  • 属性注入
  • 基于名称的注入
  • 子容器
  • 自定义生存期管理
  • 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 内置容器相关推荐

  1. .net core 杂记:用Autofac替换内置容器

    官方建议使用内置容器,但有些功能并不支持,如下: 属性注入 基于名称的注入 子容器 自定义生存期管理 Func<T> 支持 所以可以使用其他第三方IOC容器,如Autofac,下面为学习使 ...

  2. 内置哪几种服务容器_ASP.NET CORE 内置的IOC解读及使用

    在我接触IOC和DI 概念的时候是在2016年有幸倒腾Java的时候第一次接触,当时对这两个概念很是模糊:后来由于各种原因又回到.net 大本营,又再次接触了IOC和DI,也算终于搞清楚了IOC和DI ...

  3. ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)...

    在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就 ...

  4. ASP.NET CORE 内置的IOC解读及使用

    在我接触IOC和DI 概念的时候是在2016年有幸倒腾Java的时候第一次接触,当时对这两个概念很是模糊:后来由于各种原因又回到.net 大本营,又再次接触了IOC和DI,也算终于搞清楚了IOC和DI ...

  5. Python之第六章 内置容器 --- 字符串

    目录 Python之第六章 内置容器 --- 字符串 1.概念 2.凭借字符串 --- + 3.多行字符串 4.字符串的切片 例 输入员工省份证号,输出出生日期 5.分隔合并字符串 分隔字符串 合并字 ...

  6. Python之第六章 内置容器 --- 字典(映射)

    目录 Python之第六章 内置容器 --- 字典(映射) 1.定义: 2.格式: 3.字典创建示例 ​4.增加字典元素 5.删除字典 6.字典的访问 7.字典的复制 8.使用get()方法获取指定的 ...

  7. python学习笔记(07)---(内置容器-字典)

    第七章  内置容器(三) 4.字典 (1)概念:字典属于可变序列,使用"键 : 值"(key-value)的方式配对存储数据,类似拼音-汉字的映射关系 (2)格式:dictname ...

  8. python内置容器--元组,字典与集合

    1.4.原组 1.4.1.元组(tuple):将一组不可变的数据序列组合起来形成一个特殊的内置容器 1.4.2元组不允许的操作: 修改,新增元素 删除元素(允许删除整个元组) 所有会对元组内部元素发生 ...

  9. 如何在Tanzu Cluster中使用vSphere with Tanzu内置容器注册表

    vSphere With Tanzu内置了容器注册表功能,只需要在Cluster的Namespace下enable此功能.有关开启和push/pull的内容请参考vSphere with K8S下使用 ...

最新文章

  1. android 文件读取错误,Android源文件从SD卡读取错误问题,怎么处理
  2. eclipse 代码提示后面的百分比是什么意思?
  3. 基于jQuery实现垂直轮播效果
  4. 【MySQL】MySQL SQL查询语法建议
  5. pandas写入excel指定行_pandas读写excel文件的基本操作!,详细,教学,Pandas,对
  6. 6. Observable 和 数组的区别
  7. python零基础自学教材-python萌新:从零基础入门到放弃
  8. win7 64位下 memcached安装
  9. FFmpeg采集树莓派USB摄像头(UVC摄像头)
  10. 告诉你一个真实的傅里叶
  11. 互联网公司背后的“深套路”:恶意举报对手,假招聘骗取信息
  12. 路由与交换技术-18-热备份路由选择协议HSRP
  13. 2022年第三场直播公告
  14. 防灌水php,自己借鉴写了个防灌水的函数
  15. 计算机组成与设计:硬件/软件接口
  16. i59400f和i510400f打游戏差距大不大
  17. 51单片机_动态数码管显示
  18. 日文转换为罗马音_韩语发音和罗马音对照表
  19. 符合泊松分布的事件模拟到达时间生成
  20. catia CAA 获取catia版本

热门文章

  1. QT的QMultiSampleAntiAliasing类的使用
  2. c语言的32个关键词
  3. php实现的购物车类实例,PHP实现的购物车类实例_PHP
  4. c语言程序设计第四版十二五,C语言程序设计/普通高等教育十二五规划教材
  5. 第十九天:实施定性风险分析
  6. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
  7. 通过移位的方式实现相加算法
  8. SQL Server 聚集索引 clustered index 非聚集索引Nonclustered Indexes键查找查找Key Lookup执行计划过程详解
  9. 斯坦福python中文分词stanza
  10. anacoda里面安装包显示失败_VScode离线安装插件,以及安装插件失败问题