我試圖讓自己熟悉MVC3
和autofac
,但我遇到了我在遇到麻煩解決小問題。使用集裝箱/ DependencyResolver其他DLL
我正在使用autofac
與MVC3
集成,並且都運行良好,頁面加載正確,依賴關係正在被注入,這很酷。什麼是竊聽我是如何利用autofac
的Container
或MVC
的DependencyResover
在類庫項目。
我正在嘗試創建靜態類,它將幫助我處理域事件。我只是希望能夠調用具有事件參數的方法,並且應該由這個類來處理所有事情。這裏是代碼:
public static IContainer Container { get; set; }
public static void Raise<T>(T e) where T : IDomainEvent
{
foreach (var eventHandler in DomainEventManager.Container.Resolve<IEnumerable<EventHandlers.Handles<T>>>())
{
eventHandler.Handle(e);
}
}
正如你可以看到它是非常簡單,一切都將工作的偉大,如果不是MVC
方法。我的一些依賴是registeres爲InstancePerHttpRequest
(NHibernate
「會議),而其他註冊爲InstancePerDependency
或SingleInstance
。因此,當我嘗試使用在我的UI項目中創建的container
時,我發現沒有httpRequest
標籤可用。
如何重用在web項目中創建的Container
以訪問其所有功能,包括InstancePerHttpRequest
和httpRequest
標記?
或者,也許還有其他的解決我的問題?我正在考慮使用委託函數來獲取事件處理程序,但我不能(我可以嗎?)創建通用委託,我不需要在賦值時使用具體類型進行初始化。
爲什麼我要用靜態類來做這個基本上每個entity
和aggregate
或service
都需要能夠引發域事件。將EventManager
注入其中每一個都會很麻煩,靜態類正是解決我所有問題的方法。
如果有人可以幫助我讓我的周圍的頭,我將不勝感激。
乾杯,Pako
我同意你的看法,通常你不應該做這樣的事情,然而這,可以說,特殊情況。將這個類注入到我的域中的每個對象將會很麻煩。創建'singleton'與創建靜態類似乎沒有太大區別,我認爲它與獲取靜態類的事件處理函數時會有同樣的問題,它會拋出異常,導致'httpRequest'標記不存在。 – Pako 2012-07-13 08:58:48
單例和靜態類的區別在於,單例允許你在自動化測試中用更可測試/可嘲諷的版本替換實例。 – 2012-07-13 12:56:58
至於httpRequest標籤部分,如果您打算在非Web上下文中使用同一個確切的容器,則不要使用InstancePerHttpRequest註冊您的服務。我通常使用InstancePerLifetimeScope(),它的功能與IPHR相同,除非你明確地創建自己的Lifetimecopes。 – 2012-07-13 12:59:27