autofac 仓储_NET Core 3.0 项目中使用 AutoFac

本文介绍了.NET Core 3.1的发布及其与3.0的差异,强调3.1作为LTS版本的重要性。文章重点讨论了在.NET Core 3.0中使用AutoFac服务时遇到的问题,即ConfigureServices不再支持返回IServiceProvider。解决方案包括修改Program.cs以指定AutofacServiceProviderFactory,并在Startup.cs中添加ConfigureContainer方法进行Autofac注册。
摘要由CSDN通过智能技术生成

.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:https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio

如果在使用 2.1,可以暂时不用着急升级,2.1也是 LTS 版本

17b9a0987ee9f8f21537d1206f71f496.png

ASP.NET Core 3.0的新增功能:https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-3.0?view=aspnetcore-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的写法

        /// /// //负责注入服务/// /// /// 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();
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();
}

参考:https://docs.autofac.org/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting

作者:tenghao

出处:https://www.cnblogs.com/tenghao510/

版权申明:本文来源于网友收集或网友提供,如果有侵权,请转告版主或者留言,本公众号立即删除。

ef27aabf09a9f004c3538e0eb0bec923.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值