用Autofac替换.net core 内置容器
程序员文章站
2022-06-28 23:16:31
官方建议使用内置容器,但有些功能并不支持,如下: 属性注入 基于名称的注入 子容器 自定义生存期管理 Func 支持 属性注入 基于名称的注入 子容器 自定义生存期管理 Func 支持 所以可以使用其他第三方IOC容器,如Autofac,下面为学习使用记录 一、首先准备了一个接口和其实现 ......
官方建议使用内置容器,但有些功能并不支持,如下:
-
属性注入
-
基于名称的注入
-
子容器
-
自定义生存期管理
-
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 autofac var 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 autofac var 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 的使用,请参考官方文档:
推荐阅读
-
NET Core 3.0 AutoFac内置DI替换的新姿势分享
-
.Net Core中使用Autofac替换自带的DI容器的示例
-
.NET Core下自带容器IServiceCollection以及AutoFac以及AutoFac中AOP简介
-
ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)
-
ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)
-
asp.net core3.0 mvc 用 autofac
-
用Autofac替换.net core 内置容器
-
ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)
-
ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)
-
.Net Core中使用Autofac替换自带的DI容器的示例