依赖注入有利于松耦合,并提高可测试性和维护性。 ASP.Net Core使用简约的依赖项注入容器为依赖项注入 (控件的一种转换)提供内置支持 。 但是,内置容器缺少完整的依赖项注入或控制容器反转的许多功能。
为解决此问题,可以在ASP.Net Core中使用第三方容器。 换句话说,您可以轻松地用第三方容器替换内置容器。 Autofac是控件容器的反转版本,可用于解决依赖关系。 本文讨论了如何在ASP.Net Core中使用Autofac。
在Visual Studio中创建一个ASP.Net Core项目
首先,让我们在Visual Studio中创建一个ASP.Net Core项目。 假设系统中已安装Visual Studio 2017或Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建新的ASP.Net Core项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.Net Core Web应用程序”。
- 点击下一步。
- 在“配置新项目”窗口中,指定新项目的名称和位置。
- 单击创建。
- 在“创建新的ASP.Net Core Web应用程序”窗口中,从顶部的下拉列表中选择.Net Core作为运行时,并选择ASP.Net Core 2.2(或更高版本)。
- 选择“ Web应用程序”作为项目模板。
- 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
- 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
- 单击创建。
这将在Visual Studio中创建一个新的ASP.Net Core项目。 在本文的后续部分中,我们将使用该项目来使用Autofac。
在您的ASP.Net Core项目中安装Autofac
Autofac的安装非常简单–您可以从NuGet进行安装。 在撰写本文时,Autofac的当前版本是4.9.2。 要使用Autofac,还应该安装Autofac.Extensions.DependencyInjection包。 这将确保您安装了用于使用Autofac所必需的依赖项。
选择上面创建的ASP.Net Core Web应用程序项目,然后右键单击并通过NuGet软件包管理器安装Autofac.Extensions.DependencyInjection。 接受安装过程中可能会提示您的任何许可协议。 或者,您可以通过在NuGet软件包管理器控制台中输入以下命令来安装此软件包:
Install-Package Autofac.Extensions.DependencyInjection
在ASP.Net Core应用程序中创建一个类
为了说明依赖注入,我们将需要一些对象。 考虑包含下面的GetMessage方法的声明的IAuthorRepository接口。
public interface IAuthorRepository
{
string GetMessage();
}
AuthorRepository类实现IAuthorRepository接口,如下所示。
public class AuthorRepository : IAuthorRepository
{
public string GetMessage()
{
return "Hello World";
}
}
请注意,这是存储库的简约实现-即,它不包含典型存储库包含的CRUD方法。 我将留给您适当地实现CRUD方法。
在ASP.Net Core中配置Autofac
若要配置Autofac,应在Startup类的ConfigureServices方法中指定配置代码。 请注意,ConfigureServices方法用于在运行时将服务添加到容器。
第一步是创建一个容器构建器,以向Autofac容器注册必要的服务。 第一步是使用Populate方法填充框架服务,如下所示。
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(services);
下一步是向Autofac注册自定义服务。 为此,请在容器构建器实例上使用RegisterType方法,如下所示。
containerBuilder.RegisterType<AuthorRepository>().As<IAuthorRepository>();
要构建容器,请编写以下代码。
var container = containerBuilder.Build();
return container.Resolve<IServiceProvider>();
这是ConfigureServices方法的完整源代码供您参考:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(services);
containerBuilder.RegisterType<AuthorRepository>().
As<IAuthorRepository>();
var container = containerBuilder.Build();
return container.Resolve<IServiceProvider>();
}
在ASP.Net Core中的控制器中使用Autofac
既然已经在您的项目中安装并配置了Autofac,您就可以开始在控制器中使用它了。 以下代码段说明了如何解析ValuesController中的依赖关系。
public class ValuesController : ControllerBase
{
private IAuthorRepository _authorRepository;
public ValuesController(IAuthorRepository authorRepository)
{
_authorRepository = authorRepository;
} // GET api/values
[HttpGet]
public ActionResult<string> Get()
{
return _authorRepository.GetMessage();
}
//Other action methods
}
依赖注入原理是控制原理反转的一种实现。 通过允许您从外部注入这些依赖关系,该技术可从实现中删除依赖关系。 诸如Autofac之类的控件容器的倒置利用依赖注入来倒置控制流,并帮助自动化对象的实例化和生命周期管理。
依赖注入采用三种形式:构造函数注入,接口注入和属性注入。 在此示例中,我们使用构造函数注入在运行时在ValuesController类中注入依赖项(即AuthorRepository类型的实例)。
我们已经了解了如何使用Autofac替换ASP.Net Core中的默认依赖项注入容器,但是我们仅涉及其功能的表面。 在以后的文章中,我将更深入地探讨Autofac。
From: https://www.infoworld.com/article/3397077/how-to-use-autofac-in-aspnet-core.html