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

转载于:https://www.cnblogs.com/qiuguochao/p/10970672.html

.net core 杂记:用Autofac替换内置容器相关推荐

  1. NET Core 3.0 AutoFac替换内置DI的新姿势

    .NET Core 3.0 和 以往版本不同,替换AutoFac服务的方式有了一定的变化,在尝试着升级项目的时候出现了一些问题. 原来在NET Core 2.1时候,AutoFac返回一个 IServ ...

  2. 用Autofac替换.net core 内置容器

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

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

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

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

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

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

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

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

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

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

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

  8. ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)...

    在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口 ...

  9. ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)...

    在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...

最新文章

  1. Inception GoogLeNet
  2. 【NetApp】IO读写和WAFL的工作原理
  3. 逆向 EasyBase64
  4. IOS_改变UITextField placeHolder颜色、字体
  5. (map)出现最多的数
  6. 第218天:Angular---模块和控制器
  7. Docker工作笔记001---Docker的简介
  8. android卡片 弹簧滑动,如何在滚动android时拉类似于弹性类型的布局?
  9. ZOJ3944People Counting暴力/枚举
  10. 蓝桥杯 ALGO-47 算法训练 蜜蜂飞舞
  11. 小米wifi+fidder设置代理抓包
  12. 工业互联网常用无线通信协议介绍(详细版)
  13. 新概念51单片机c语言教程考试题,新概念51单片机C语言教程例题.doc
  14. RL78开发问题记录
  15. uniapp 小程序支付功能
  16. 微软bi报表服务器,升级 Power BI 报表服务器
  17. 【优雅解决】:换源后 sudo apt-get update 出现 N: Updating from such a repository can't be done securely……
  18. PHPCAS客户端搭建教程
  19. html中页码居中,如何把Word2007的页脚设置为页码并居中?
  20. waf防火墙是什么有什么作用?

热门文章

  1. linux服务器用哪个面板好,Linux服务器管理面板哪家比较好用?
  2. win10安装opcenum_Win10提示Windows无法安装到GPT分区形式磁盘
  3. java 异常管理员_GitHub - kangZan/JCatch: Exception异常管理平台,支持Java、PHP、Python等多种语言...
  4. Jmeter BeanShell学习(一) - BeanShell取样器(二)
  5. 160 - 36 cupofcoffe.2
  6. 合并排序算法排序过程_合并排序| 用于大型输入的最佳排序算法之一
  7. android 代码设置 键盘适应_硬核软件,能在电脑上控制iPhone和Android手机
  8. controller控制器怎么写_I2C控制器编程_框架
  9. uva 11269——Setting Problems
  10. uva 11054——Wine trading in Gergovia