Dependency injection 在Asp.net内核中实现DI

Dependency injection 在Asp.net内核中实现DI,dependency-injection,asp.net-core,Dependency Injection,Asp.net Core,这个问题是不同的,我知道DI是什么,但我想知道asp.net核心是如何使用DI的。我们可以在ASP.NET内核中配置自定义日志记录,但我不知道为什么它可以工作 通常,我们使用new关键字来实例化一个类,然后我们可以在控制器中使用它。在ASP.NET Core中,我们使用具有如下参数的控制器构造函数: public class HomeController : Controller { private readonly ILogger _logger; public HomeCon

这个问题是不同的,我知道DI是什么,但我想知道asp.net核心是如何使用DI的。我们可以在ASP.NET内核中配置自定义日志记录,但我不知道为什么它可以工作

通常,我们使用
new
关键字来实例化一个类,然后我们可以在控制器中使用它。在ASP.NET Core中,我们使用具有如下参数的控制器构造函数:

public class HomeController : Controller
{
    private readonly ILogger _logger;
    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }
}
公共类HomeController:控制器
{
专用只读ILogger\u记录器;
公共家庭控制器(ILogger记录器)
{
_记录器=记录器;
}
}

我知道这是一种叫做依赖注入的设计模式,但我想知道这是如何实现的。ASP.NET核心团队是如何实现这一点的?

在依赖项注入和控制反转术语中,注入的内容被称为“服务”

在应用程序启动时,您可以使用IoC容器注册服务,这意味着:您可以将具体的实现和生命周期与特定的类型绑定在一起

现在,当需要一个控制器来处理传入的请求时,MVC将使用控制器工厂来查找并实例化相关的控制器。当该控制器具有构造函数参数时,它将要求IoC容器解析所需的服务参数


有关的详细信息。

您的问题不清楚。你可能想重新表述你的问题。你在“想知道这项技术的深度实现”?什么?@Steven我想知道ILogger什么时候在public HomeController(ILogger logger)中初始化,或者logger什么时候得到值?可能是的副本,你能给我分享与之相关的关键代码吗“用于查找和实例化相关控制器的控制器工厂。当该控制器具有构造函数参数时,它将要求IoC容器解析所需的服务参数“。我想知道IoC容器如何解析所需的服务参数您可以将这些搜索词中的每一个放在您最喜欢的web搜索引擎中。详细解释如何构建一个IoC容器过于宽泛,不适合一个单一的答案。一个相关的关键字是“reflection”,用于在运行时检查类型和方法。