标签:Core AutoFac Assembly Repository builder 3.0 Net
Net Core 2.x 跟 Net Core3.0 还是有很大的区别的,随着.NET Core 3.1发布,也就意味着老版本慢慢的要停止维护。
Net Core 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
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的写法
/// <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(); }
参考:https://docs.autofac.org/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting
标签:Core,AutoFac,Assembly,Repository,builder,3.0,Net 来源: https://www.cnblogs.com/tenghao510/p/11984473.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。