我在v1,v2和(很快)v3中有许多MVC.NET应用程序。
许多应用程序使用存储库模式(亚音速),每个控制器都按如下方式注入存储库;
public class DefaultController : Controller
{
private readonly iRepository repo;
public DefaultController() : this(new Repository()) { }
public DefaultController(iRepository repository) { repo = repository; }
//
// GET: /Default/
public ActionResult Index()
{
ViewData["HelloWorld"] = repo.GetData("test");
return View();
}
}
Ninject(或者是simlar)是否允许我只使用一次链接(在我的全局asax中)以及这看起来像什么?
除了在创建新构造函数时节省时间之外还有其他好处吗?
答案 0 :(得分:4)
你在这里做的是“穷人的”依赖注入。您是说如果调用者没有提供实例,请使用此实例(新存储库)。那么,像Ninject(Autofac,Windsor,Structuremap等)这样的IoC容器会给你带来一些东西。
1)如果您需要进行彻底的更改并将默认实现从Repository更改为MyAwesomeRepository,则可以在一个位置而不是在所有不同的控制器中执行此操作。
2)你将能够摆脱你的默认构造函数,只有一个带有iRepository的构造函数。
我认为使用IoC容器进行调查是值得的,而不是采用上述方法。
所以,它看起来就像这样:
//global asax
void Application_Load()
{
IKernel kernel = new StandardKernel();
kernel.Bind<iRepository>().To<Repository>();
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}
您可以在此处了解如何使依赖项解析器正常工作:http://www.shahnawazk.com/2010/12/dependency-injection-in-aspnet-mvc-3.html