我把統一容器創建/設置在global.asax中。並且讓該容器成爲該類的一個靜態屬性,因爲我不確定團結如何工作,或者容器需要保持活躍狀態並在其他地方引用。 mvc 2的統一初始化/配置的推薦位置是什麼?在使用統一的asp.net MVC2中,我的程序是否需要管理容器的生命週期?
1
A
回答
1
你不應該爲容器保留一個明確的引用。一個容器應該連接請求的對象圖(在這種情況下是控制器)並且避開它。
看看在MVCContrib中IControllerFactory的容器特定實現。
這麼說,我喜歡WindsorControllerFactory很多比UnityControllerFactory更好,但你可以實現使用相同的模式(構造器注入)作爲WindsorControllerFactory一個UnityControllerFactory。
如果你想像我們這樣做,你的Global.asax應該是這樣的:
var container = new UnityContainer();
// configure container
var controllerFactory = new UnityControllerFactory(container);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
controllerFactory
持有到容器的引用,這樣你就可以讓它走出去的範圍中的Application_Start - 這是怎麼回事留下來,因爲ControllerFactory停留在周圍。
0
下面是我們如何做到了:
public class UnityControllerFactory : DefaultControllerFactory
{
private IUnityContainer container;
public UnityControllerFactory(IUnityContainer container)
{
this.container = container;
}
public static void Configure()
{
IUnityContainer container = new UnityContainer();
//...Register your types here
ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory(container));
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
return base.GetControllerInstance(requestContext, controllerType);
}
if (!typeof(IController).IsAssignableFrom(controllerType))
{
throw new ArgumentException("Type requested is not a controller", "controllerType");
}
return container.Resolve(controllerType) as IController;
}
}
然後在的global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
.... whatever you like
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
UnityControllerFactory.Configure();
}
}
相關問題
- 1. 是否有必要從通用容器管理TEnumerators的生命週期?
- 2. 如何讓我的項目使用容器管理的Enitymanager生命週期而不是應用程序管理的生命週期?
- 3. 我是否需要一個完整的內容管理系統?
- 4. Quartz.net的統一生命週期管理器
- 5. 我需要與Android應用程序生命週期的協調
- 6. 使用Structuremap來管理ASP.NET MVC中的ObjectContext生命週期
- 7. ASP.NET應用程序生命週期 - 非頁面生命週期
- 8. Autofac生命週期管理
- 9. 統一和生命週期管理配置 - 總是瞬間生命期管理器
- 10. Lucene.NET生命週期管理
- 11. 我是否需要在調用async_write時關心套接字的生命週期?
- 12. 應用程序的生命週期:如何管理更新
- 13. 尋找一個應用程序生命週期管理工具
- 14. 託管一個ASP.Net MVC2應用程序的要求是什麼?
- 15. Asp.NET Global.asax - 應用程序生命週期
- 16. 如何在Web應用程序中使用db4o IObjectContainer? (容器的生命週期?)
- 17. SimpleRepository的生命週期管理
- 18. 是否有可能完全管理流程及其分支的生命週期?
- 19. 對象生命週期管理和IoC容器
- 20. 新貴腳本運行容器不會管理生命週期
- 21. 如何在WPF應用程序中管理WCF客戶端的生命週期
- 22. 管理實時磁貼和應用程序生命週期
- 23. 我應該如何管理MVC Core中的DbContext生命週期?
- 24. iphone應用程序的生命週期?
- 25. Rails應用服務器的生命週期管理
- 26. 「需要SSL」如何影響ASP.NET MVC應用程序生命週期?
- 27. 使用Perl Dancer的應用程序生命週期是什麼?
- 28. ASP.net生命週期中的線程處理
- 29. 實例生命週期管理
- 30. 使用負載平衡器的ASP.NET應用程序生命週期
將這個例子中是可取的,除了剛剛控制器工廠的事情?我正在研究如何使用其正確的存儲庫(員工存儲庫,Emailer存儲庫等)連接域邏輯類。 – Maslow 2010-01-15 14:39:49
是的。如果它是ASP.NET MVC,它們都需要通過控制器。讓容器將Presentation層服務注入到控制器中;將域對象放入表示層服務中;存儲到域對象中,等等。 – 2010-01-15 15:09:27