NET Core 3.0 AutoFac内置DI替换的新姿势分享

网络编程 2025-04-04 20:55www.168986.cn编程入门

在NET Core 3.0的时代,AutoFac内置的依赖注入(DI)呈现出新的面貌。对于那些熟悉NET Core开发的朋友们来说,升级项目时可能会遇到一些关于服务注册和注入的新挑战。让我们一同如何在NET Core 3.0中优雅地使用AutoFac的内置DI替换功能。

在之前的NET Core版本中,我们习惯于使用AutoFac返回一个`IServiceProvider`来注入到`.NET Core`的服务中。但在NET Core 3.0中,这一方式有了显著的改变。具体来说,我们需要调整注册服务的方式以适应新的框架版本。

下面是一个典型的例子,展示了如何在NET Core 3.0中使用AutoFac进行服务注册:

示例代码如下:

```csharp

public class AutofacModuleRegister : Autofac.Module

{

protected override void Load(ContainerBuilder builder)

{

// 注册以"Service"结尾的类,并实现其接口

builder.RegisterAssemblyTypes(GetAssemblyByName("BlogService"))

.Where(a => a.Name.EndsWith("Service"))

.AsImplementedInterfaces();

// 注册以"Repository"结尾的类,并实现其接口

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的世界里,依赖注入(DI)是一个重要的概念,它帮助我们实现代码的解耦和模块化。当我们升级到新的框架版本时,例如从.NET Core 2.1到3.0,我们可能需要调整我们的配置来适应新的特性。本文将向你展示如何在新的版本中配置AutoFac,一个流行的依赖注入容器。

我们来看看在`ConfigureServices`方法中如何注册AutoFac服务:

```csharp

public IServiceProvider ConfigureServices(IServiceCollection services)

{

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

return Blog.AutoFacModule.Solucation.AutoFac.Provider.RegisterAutofac.ForRegisterAutofac(services);

}

```

在上述代码中,我们调用了自定义的`ForRegisterAutoFac`方法,将我们的策略和AutoFac一起整合到内置的DI中。这个方法的具体实现如下:

```csharp

public static class RegisterAutofac

{

public static IServiceProvider ForRegisterAutofac(IServiceCollection services)

{

var builder = new ContainerBuilder();

builder.Populate(services); // 将ServiceCollection中的服务添加到ContainerBuilder中

builder.RegisterModule(); // 注册自定义的Autofac模块

var container = builder.Build(); // 构建Container

return new AutofacServiceProvider(container); // 使用Autofac容器创建ServiceProvider实例

}

}

```

接下来,在API层,我们依赖注入Service,这样就完成了在.NET Core 2.1版本的AutoFac配置。我们以ValuesController为例:

```csharp

[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()); // 返回人员列表的JSON字符串

}

}

```

现在让我们来看看升级到.NET Core 3.0后需要做哪些改变。在.NET Core 3.0中,引入了具有强类型容器配置的功能。这意味着我们需要修改服务工厂的配置,并在Startup中使用新的配置方式。我们需要在Program.cs文件中修改服务工厂,指定为AutofacServiceProviderFactory。在Startup.cs中添加ConfigureContainer方法来进行容器的配置。以下是修改后的代码示例:

Program.cs中的修改:

```csharp

配置容器,以支持依赖注入和功能扩展

在软件开发中,容器的配置是非常重要的一环。通过配置容器,我们可以轻松地管理依赖关系,并实现功能的扩展。下面是一个关于如何配置容器的示例方法:

我们需要注册一个模块,以便在容器中管理依赖关系。通过调用`RegisterModule`方法,并传入`Blog.AutoFacModule.Solucation.AutoFac.Register.AutofacModuleRegister()`实例,我们可以完成模块的注册。

接下来,我们要在控制器中使用依赖注入。为了实现这一点,我们需要注册程序集中的类型,并在注册过程中指定控制器基类。通过调用`RegisterAssemblyTypes`方法,并传入程序集类型以及一个谓词函数,我们可以注册程序集中所有继承自`ControllerBase`的类(除了`ControllerBase`本身)。通过调用`PropertiesAutowired`方法,我们可以实现属性的自动注入。

完成以上步骤后,我们的容器配置就完成了。现在,我们可以放心地启动应用程序,而不用担心出现任何问题。

我还想分享一些额外的信息。我们的项目托管在Github上,地址是[

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by