asp.net core 2

时间:2017-11-30 09:21:13

标签: c# dependency-injection asp.net-core-2.0

我已阅读此官方文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection

构造函数注入中有一些我不理解的东西:

让我们看看我的代码,它运行良好:

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;
    }

如果更改构造函数参数顺序或者我删除了一些这样的参数,它也可以正常工作:

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#中如何在构造函数参数中使用动态的东西? 是否有一组所有类型的重载构造函数?

由于

1 个答案:

答案 0 :(得分:2)

  

如何在C#中使用构造函数参数中的动态?是否有一组所有类型的重载构造函数?

不要像那样使用“动态”,这句话就是一个流行语。在编程中,一切都是动态的。

如果你想询问DI框架如何将注册服务与构造函数参数进行匹配,那么是的,有一组构造函数重载。

DI框架通过反思找到这些,请参阅MSDN: Type.GetConstructors()。然后,对于每个构造函数,每个构造函数的框架obtains the parameters将这些构造函数与注册的服务进行匹配,并调用其中一个构造函数。