2011-03-03 52 views
0

我在v1,v2和(很快)v3中有許多MVC.NET應用程序。MVC.NET + Ninject DI到控制器中

許多應用程序使用存儲庫模式(亞音速),每個控制器如下注入存儲庫;

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

你認真地用小'i'作爲你的接口前綴?這不完全是「標準」。 – 2011-03-04 09:00:37

回答

4

你在這裏做的是「窮人的」依賴注入。你說如果調用者沒有提供一個實例,使用這個(新的Repository)。所以,像Ninject這樣的IoC容器(Autofac,Windsor,Structuremap等)會給你帶來幾件事情。 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

+0

我一直認爲我的界面也允許我對DAL和簡單的開關進行修改,但是我都是從多個控制器移動到全局的。這是有道理的。 – Gavin 2011-03-06 14:10:51