我已经在 global.asax 文件中的项目中设置了 ninject...
protected void Application_Start()
{
RegisterDependencyResolver();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
private void RegisterDependencyResolver()
{
var kernel = new StandardKernel();
kernel.Bind<PteDotNetCore.IBlogManager>().To<PteDotNetCore.BlogManager>();
DependencyResolver.SetResolver(new PteDotNet.Resolution.PteDotNetDependencyResolver(kernel));
}
我有一个带有 2 个构造函数的 Controller ......
public CodeController()
{
}
public CodeController(IBlogManager injectedManager)
{
manager = injectedManager;
}
当我删除该行时:
kernel.Bind<PteDotNetCore.IBlogManager>().To<PteDotNetCore.BlogManager>();
从代码的第一 block 开始,添加该行时将使用我的默认构造函数,然后使用采用接口(interface)的构造函数。
请有人告诉我 MVC 做出了什么决定来选择构造函数?不太清楚。
最佳答案
这个决定实际上是由ninject做出的。对于构造函数注入(inject),它会选择参数最多的一个,请参阅 wiki 了解其工作原理的详细信息
https://github.com/ninject/ninject/wiki/Injection-Patterns/1e462388cee1887a4bb90067cf334d91604f7ea8
关于asp.net-mvc-3 - 当我在 IOC (ninject) 上更改这行代码时,MVC 如何更改要使用的 Controller 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952831/