我已阅读此官方文档: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#中如何在构造函数参数中使用动态的东西? 是否有一组所有类型的重载构造函数?
由于
答案 0 :(得分:2)
如何在C#中使用构造函数参数中的动态?是否有一组所有类型的重载构造函数?
不要像那样使用“动态”,这句话就是一个流行语。在编程中,一切都是动态的。
如果你想询问DI框架如何将注册服务与构造函数参数进行匹配,那么是的,有一组构造函数重载。
DI框架通过反思找到这些,请参阅MSDN: Type.GetConstructors()
。然后,对于每个构造函数,每个构造函数的框架obtains the parameters将这些构造函数与注册的服务进行匹配,并调用其中一个构造函数。