依赖注入概述
依赖注入概述 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.1
甲依赖性是另一个对象需要的任何对象。使用应用程序中其他类依赖MyDependency的WriteMessage方法检查以下类:
C#
public class MyDependency
{
public MyDependency()
{
}
public Task WriteMessage(string message)
{
Console.WriteLine(
$"MyDependency.WriteMessage called. Message: {message}");
return Task.FromResult(0);
}
}
MyDependency可以创建类的实例以使该WriteMessage方法可用于类。该MyDependency班是一个依赖IndexModel类:
C#
public class IndexModel : PageModel
{
MyDependency _dependency = new MyDependency();
public async Task OnGetAsync()
{
await _dependency.WriteMessage(
"IndexModel.OnGetAsync created this message.");
}
}
该类创建并直接依赖于MyDependency实例。代码依赖性(例如前面的示例)存在问题,应该避免使用,原因如下:
- 要替换
MyDependency为其他实现,必须修改该类。 - 如果
MyDependency有依赖项,则必须由类配置它们。在具有多个类的大型项目中MyDependency,配置代码分散在整个应用程序中。 - 这种实现很难进行单元测试。应用程序应该使用模拟或存根
MyDependency类,这种方法是不可能的。
依赖注入通过以下方式解决了这些问题:
- 使用接口来抽象依赖项实现。
- 在服务容器中注册依赖项。ASP.NET Core提供了一个内置的服务容器IServiceProvider。服务已在应用程序的
Startup.ConfigureServices方法中注册。 - 注射服务为使用它的类的构造函数。框架负责创建依赖关系的实例,并在不再需要时处理它

浙公网安备 33010602011771号