千家信息网

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

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍NET Core 3.0 AutoFac内置DI替换的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!.NET Core 3.0 和 以往版本不同,替换A
千家信息网最后更新 2026年11月02日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安全错误 数据库的锁怎样保障安全 天津市摩尔互联网科技 广东万易互联网科技有限公司惠州分公司 哈尔滨大商圈互联网科技有限公司 科技金融是不是互联网金融 科技互联网龙头 互联网巨头科技公司 互联网公司 科技公司 互联网科技媒体 南京欣网互联网科技 互联网 新科技 卓越科技互联网 招聘 盛创互联网科技有限公司 衡水科技产业互联网平台 济南和联互联网科技有限公司 随着互联网科技发展 常德市电业局互联网科技部 坤平互联网科技 米聚互联网科技南京有限公司排面 易租星互联网科技有限公司 科技互联网公司两年变化 互联网金融监管科技数据 互联网核心科技是什么 互联网科技的发展 万达互联网科技 撒么互联网科技公司 互联网科技中介 哈尔滨屹滨互联网科技有限公司 合肥互联网科技公司公章图片 米泉互联网科技专业怎么样 小牛互联网科技有限公司地址
0