NET Core 3.0 项目中使用 AutoFac
程序员文章站
2023-11-10 22:37:52
.net core 3.1 今天已正式发布,3.1跟3.0差别不是很大,主要是对 3.0一小部分修复和完善,最重要的是.NET Core 3.1是长期支持(LTS)版本,建议大家升级。 .net core 2.2 这个月就要停止维护,并且微软将不再提供支持,如果你在使用 2.2 ,建议升级到 3.1 ......
.net core 3.1 今天已正式发布,3.1跟3.0差别不是很大,主要是对 3.0一小部分修复和完善,最重要的是.net core 3.1是长期支持(lts)版本,建议大家升级。
.net core 2.2 这个月就要停止维护,并且微软将不再提供支持,如果你在使用 2.2 ,建议升级到 3.1,可以先升级到3.0,可以参考文档:
asp.net core 2.2 迁移到3.0:
如果在使用 2.1,可以暂时不用着急升级,2.1也是 lts 版本
asp.net core 3.0的新增功能:
替换autofac服务
在 .net core 3.0 之前的时候,返回一个 iserviceprovider 注入到configureservices服务中。
用 .net core 3.0 框架运行之后会报错:configureservices returning an system.iserviceprovider isn't supported.
找文档之后发现 3.0 中 configureservices 已经不支持返回 iserviceprovider 。
.net core 2.2的写法
/// <summary> /// //负责注入服务 /// </summary> /// <param name="services"></param> /// <returns></returns> public iserviceprovider configureservices(iservicecollection services) { //初始化容器 var builder = new containerbuilder(); //管道寄居 builder.populate(services); //业务逻辑层所在程序集命名空间 assembly service = assembly.load("netcoredemo.service"); //接口层所在程序集命名空间 assembly repository = assembly.load("netcoredemo.repository"); //自动注入 builder.registerassemblytypes(service, repository) .where(t => t.name.endswith("service")) .asimplementedinterfaces(); //注册仓储,所有irepository接口到repository的映射 builder.registergeneric(typeof(repository<>)) //instanceperdependency:默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象; .as(typeof(irepository<>)).instanceperdependency(); //构造 applicationcontainer = builder.build(); //将autofac反馈到管道中 return new autofacserviceprovider(applicationcontainer); }
.net core 3.0的写法
修改 program.cs 将默认serviceproviderfactory指定为autofacserviceproviderfactory
public class program { public static void main(string[] args) { createhostbuilder(args).build().run(); } public static ihostbuilder createhostbuilder(string[] args) => host.createdefaultbuilder(args) //将默认serviceproviderfactory指定为autofacserviceproviderfactory .useserviceproviderfactory(new autofacserviceproviderfactory()) .configurewebhostdefaults(webbuilder => { webbuilder.usestartup<startup>(); webbuilder.useurls("http://*:8004"); }); }
然后在 startup.cs 中添加 configurecontainer 方法
使用configurecontainer访问autofac容器生成器,并直接向autofac注册。
public void configurecontainer(containerbuilder builder) { //业务逻辑层所在程序集命名空间 assembly service = assembly.load("netcoredemo.service"); //接口层所在程序集命名空间 assembly repository = assembly.load("netcoredemo.repository"); //自动注入 builder.registerassemblytypes(service, repository) .where(t => t.name.endswith("service")) .asimplementedinterfaces(); //注册仓储,所有irepository接口到repository的映射 builder.registergeneric(typeof(repository<>)) //instanceperdependency:默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象; .as(typeof(irepository<>)).instanceperdependency(); }
参考:
推荐阅读
-
NET Core 3.0 项目中使用 AutoFac
-
在ASP.NET Core 3.0中使用Swagger
-
在IIS上部署 .Net Core 3.0 项目踩坑实录
-
使用.net core3.0 正式版创建Winform程序
-
在Asp.Net或.Net Core中配置使用MarkDown富文本编辑器有开源模板代码(代码是.net core3.0版本)
-
ASP.NET Core 3.0 : 二十八. 在Docker中的部署以及docker-compose的使用
-
我来告诉你:VS2019开发ASP.NET Core 3.0 Web项目,修改视图后,刷新浏览器看不到修改后的效果怎么处理
-
.NET Core Razor Pages中ajax get和post的使用
-
在.NET Core 3.0中发布单个Exe文件(PublishSingleFile)
-
在Asp.Net Core中配置使用MarkDown富文本编辑器实现图片上传和截图上传(开源代码.net core3.0)