依赖注入概述

依赖注入概述  https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.1

依赖性是另一个对象需要的任何对象。使用应用程序中其他类依赖MyDependencyWriteMessage方法检查以下

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方法中注册
  • 注射服务为使用它的类的构造函数。框架负责创建依赖关系的实例,并在不再需要时处理它
posted @ 2018-10-24 15:15  黄明辉  阅读(53)  评论(0)    收藏  举报