千家信息网

NET Core 3.0 AutoFac内置DI替换的示例分析

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍NET Core 3.0 AutoFac内置DI替换的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!.NET Core 3.0 和 以往版本不同,替换A
千家信息网最后更新 2025年01月20日NET Core 3.0 AutoFac内置DI替换的示例分析

这篇文章主要介绍NET Core 3.0 AutoFac内置DI替换的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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

原来在NET Core 2.1时候,AutoFac返回一个 IServiceProvider 参数注入到ConfigureServices .NET Core 服务中,基本大痣是这样做的。

首先我们需要一个重写 Autofac.Module 的方法,这将用于将我们 Register [数据访问层] 以及 Services [逻辑层] 的注册。

public class AutofacModuleRegister : Autofac.Module {  //重写Autofac管道Load方法,在这里注册注入  protected override void Load(ContainerBuilder builder)  {   //必须是Service结束的   builder.RegisterAssemblyTypes(GetAssemblyByName("BlogService")).Where(a => a.Name.EndsWith("Service")).AsImplementedInterfaces();   builder.RegisterAssemblyTypes(GetAssemblyByName("BlogRepository")).Where(a => a.Name.EndsWith("Repository")).AsImplementedInterfaces();   //单一注册   // builder.RegisterType().Named(typeof(PersonService).Name);  }  ///   /// 根据程序集名称获取程序集  ///   /// 程序集名称  public static Assembly GetAssemblyByName(String AssemblyName)  {   return Assembly.Load(AssemblyName);  } }

随后,将.NET Core的ConfigureServices方法的返回值改成IServiceProvider,这将用于注入你的服务。

 public IServiceProvider ConfigureServices(IServiceCollection services)  {   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);   return Blog.AutoFacModule.Solucation.AutoFac.Provider.RegisterAutofac.ForRegisterAutofac(services);  }

上面的代码中我们调用了 ForRegisterAutoFac 我们自定义的方法,这将我们定义的策略和AutoFac 一起替换内置DI.

public static class RegisterAutofac {  public static IServiceProvider ForRegisterAutofac(IServiceCollection services)  {   var builder = new ContainerBuilder();   builder.Populate(services);   builder.RegisterModule();   var container = builder.Build();    return new AutofacServiceProvider(container);  } }

在API层,我们依赖注入Service,这样我们.NET Core2.1基本的AutoFac就实现了。

[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase {  private IPersonService _personService;  public ValuesController(IPersonService personService)  {   _personService = personService;  }  // GET api/values  [HttpGet]  public ActionResult Get()  {   return Newtonsoft.Json.JsonConvert.SerializeObject(_personService.people());  }}

就现在我们说一说.NET Core3.0 和 以往版本的区别。我将所有项目以及依赖项全部改成3.0版本,就现在启动,你会发现意想不到的事情。

啥?你说啥?弄萨累? 咋不管用了嘞?

经过看了官方文档,才知道..NET Core 3.0 引入了具有强类型容器配置的功能。它提供了 ConfigureContainer 方法,您可以在其中使用Autofac来注册事物,而不必通过 ServiceCollection 来注册事物。so....好吧!在.NET Core3.0 将如何配置。

首先我们需要在 Program.cs 中修改服务工厂,内置是 ServiceProviderFactory 的,我们将要指定为: AutofacServiceProviderFactory 。

public static IHostBuilder CreateHostBuilder(string[] args) =>   Host.CreateDefaultBuilder(args)    .ConfigureWebHostDefaults(webBuilder =>    {     webBuilder.UseStartup();    })  .UseServiceProviderFactory(new AutofacServiceProviderFactory());

现在需要在 Startup.cs 中添加方法 ConfigureContainer ,并添加以下代码。

public void ConfigureContainer(ContainerBuilder builder)  {   //添加依赖注入关系   builder.RegisterModule(new Blog.AutoFacModule.Solucation.AutoFac.Register.AutofacModuleRegister());   var controllerBaseType = typeof(ControllerBase);   //在控制器中使用依赖注入   builder.RegisterAssemblyTypes(typeof(Program).Assembly)    .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)    .PropertiesAutowired();  }

然后大功告成,启动再也没问题了~。

以上是"NET Core 3.0 AutoFac内置DI替换的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

方法 服务 版本 程序 示例 分析 事物 代码 内容 名称 时候 篇文章 问题 项目 配置 不同 大功告成 意想不到 事情 价值 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 朝阳云科网络技术有限公司 金格数据库 宁夏吴忠办公软件开发贵吗 物品多分类技术数据库设计方案 移动网络安全分析 网络技术都包括什么 网线网络安全低怎么处理 昌平区口碑好的软件开发诚信服务 百里守约怎么打到服务器 数据库监听器怎么开 敏捷软件开发质量三点价值观 服务器租赁 五邑大学无线网络技术考核 同程旅行软件开发待遇怎么样 小学生关于网络安全 网络安全与云计算龙头 西安润宇互联网络科技有限公司 郑州应用软件开发哪家实惠 工业网络技术面试范文 软件开发程序员任职资格 万方数据库检索特点 南京曲中求网络技术有限公司 网络安全法制宣传周手抄报图片 方舟神塔界服务器怎么进 浙江网络技术转让参考价 网络技术措施使用规定 公司服务器推荐 大学计算机网络技术认知报告 宾县软件开发项目管理在线咨询 plc连接数据库有什么用
0