NET Core 3.0 AutoFac内置DI替换的新姿势分享
在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
}
///
/// 根据程序集名称获取程序集
///
/// 程序集名称
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
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
{
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上,地址是[
编程语言
- NET Core 3.0 AutoFac内置DI替换的新姿势分享
- 浅谈jQuery animate easing的具体使用方法(推荐)
- ES6中新增的Object.assign()方法详解
- Vue.js中对css的操作(修改)具体方式详解
- js中利用cookie实现记住密码功能
- 详谈PHP程序Laravel 5框架的优化技巧
- 手把手教你打印出PDF(关于fpdf的简单应用)
- PHP常见字符串处理函数用法示例【转换,转义,截取
- 深入理解Vue.js源码之事件机制
- javascript中 try catch用法
- vue实现输入框的模糊查询的示例代码(节流函数
- Automation服务器不能创建对象的多种解决办法
- JS+canvas画一个圆锥实例代码
- mysql事件之修改事件(ALTER EVENT)、禁用事件(
- JavaScript入门基础
- jsp页面 列表 展示 ajax异步实现方法