关于c#:asp.net core 2中的构造函数依赖注入

Constructor Dependency injection in asp.net core 2

本问题已经有最佳答案,请猛点这里访问。

我已经阅读了以下官方文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection。

在构造函数注入中有一些我不理解的地方:

让我们看一下我的代码,它工作得很好:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class HomeController : Controller
{
    private readonly UserManager<Utilisateurs> _userManager;
    private readonly SignInManager<Utilisateurs> _signInManager;
    private readonly RoleManager<IdentityRole> _roleManager;

    public HomeController(
        SignInManager<Utilisateurs> signInManager,
        UserManager<Utilisateurs> userManager,
        RoleManager<IdentityRole> roleManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
        _roleManager = roleManager;
    }

如果更改构造函数参数顺序或删除以下某些参数,它也可以正常工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class HomeController : Controller
{
    private readonly UserManager<Utilisateurs> _userManager;
    private readonly SignInManager<Utilisateurs> _signInManager;

    public HomeController(
        UserManager<Utilisateurs> userManager
        SignInManager<Utilisateurs> signInManager,
        )
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

我理解DI的概念。我不明白的是,它是如何在C中工作的,以便在构造函数参数中有动态的东西?是否有一组所有类型的重载构造函数?

谢谢


how does it work in C# to have something dynamic in constructor parameters ? Is there a set of all kind of overload constructors?

不要那样使用"动态"这个词,它在那句话中是个时髦的词。在编程中,一切都是动态的。

如果您想问DI框架如何用构造函数参数匹配注册的服务,那么是的,有一组构造函数重载。

DI框架通过反射找到这些,请参阅msdn:Type.GetConstructors()。然后,对于每个构造函数,框架获取每个构造函数的参数,将这些参数与注册的服务相匹配,并调用其中一个构造函数。