我做了我的研究,但我找不到任何我想做的具体例子。
我成功地将Ninject实施到了我的MVC项目中。一切都很完美。但是,我想做最后一步。
到现在为止,我一直在这样工作(正常的DI模式):
public class myController : Controller
{
private iMyInterface myRepository;
public myController(iMyInterface myRepository)
{
this.myRepository = myRepository;
}
public ActionResult list(){
return view(myRepository.getMyList())
}
// rest o the code ...
}
我的问题是;有办法做这样的事情吗? (存储库“生成器”)
public class myController : Controller
{
private iMyInterface myRepository = specialClass.GetMyRepository();
public ActionResult list(){
return view(myRepository.getMyList()) }
// rest o the code ...
}
我知道我正在写一个无意义的代码,但我的想法是能够做类似的事情。
任何建议?
答案 0 :(得分:5)
我不知道specialClass
应该是什么,但这看起来很像行动中的Service Locator anti-pattern。
通过构造函数注入存储库的第一个选项更好,因为它为您提供了更多选项,包括使用{{1 }}:
specialClass
我不了解Ninject,但大多数DI容器都提供了一个选项,可以将接口映射到返回接口实例的方法调用。
答案 1 :(得分:0)
我宁愿在构造函数中使用存储库“Generator”。这会给你相同的结果,但注射正确。