2013-07-11 84 views
0

我正在學習asp.net空間中的MVC。如果我想通過我的控制器ctor一個參數,似乎我可以創建一個控制器工廠,我在MVC框架中註冊。我看到下面的例子,我不得不想知道在控制器創建時MVC框架如何知道使用這個工廠?asp.net mvc 2自定義控制器工廠

public class CustomControllerFactory : IControllerFactory 
{ 
    public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName) 
     { 
     ILogger logger = new DefaultLogger(); 
     var controller = new HomeController(logger); 
     return controller; 
    } 
    public System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(
    System.Web.Routing.RequestContext requestContext, string controllerName) 
    { 
     return SessionStateBehavior.Default; 
    } 
    public void ReleaseController(IController controller) 
    { 
     IDisposable disposable = controller as IDisposable; 
     if (disposable != null) 
      disposable.Dispose(); 
    } 
} 

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
    RegisterCustomControllerFactory(); 
    } 
} 
private void RegisterCustomControllerFactory() 
{ 
    IControllerFactory factory = new CustomControllerFactory(); 
    ControllerBuilder.Current.SetControllerFactory(factory); 
} 

所以這個控制器工廠創建一個HomeController的實例並傳遞一個特定的Logger對象。現在是否因爲註冊了此自定義控制器工廠而在此應用程序中未使用默認控制器工廠?我現在有2個工廠嗎?所有其他控制器的默認設置,以及針對HomeController的特定控制器?如果是的話,MVC如何知道使用哪個控制器工廠?在一個應用程序中,我希望許多控制器都採用不同的參數類型,那麼這將如何工作?

我試着用谷歌搜索這個特定的問題,但無法真正發現它周圍的任何東西。我剛剛發現了一些人們使用的框架,但我想了解它的具體部分。謝謝!

回答

0

你不需要控制器工廠。看看asp.net mvc dependency injection。你應該得到的基本概述,並找到依賴注入能夠與asp.net mvc 2

+0

如果我不想使用第三方依賴注入器框架?它似乎使自定義控制器是正確的方式去吧?如果是這樣,我的問題就代表了看起來幾乎每個合理複雜的MVC應用都需要這個功能,那麼爲什麼所有這些外部依賴注入器都不需要內置某種東西? – user441521

+0

另外,看着http://haacked.com/archive/2007/12/07/tdd-and-dependency-injection-with-asp.net-mvc.aspx它仍然創建一個自定義控制器工廠,但我再次沒有看到關於MVC如何知道這個控制器在它的ctor中使用這個自定義類型的鏈接。我似乎沒有看到明確定義的任何內容。 – user441521