MVC.NET + Ninject DI进入控制器

时间:2011-03-03 13:38:54

标签: asp.net-mvc ninject

我在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中)以及这看起来像什么?

除了在创建新构造函数时节省时间之外还有其他好处吗?

1 个答案:

答案 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