我正在使用棱鏡事件聚合器來觸發和關聯事件(發佈和訂閱)。該服務僅在有請求時才被實例化。從客戶端(通過通道)或從另一個服務(作爲類對象)。棱鏡事件聚合器和WCF服務和Unity
問題:
- 如果事件沒有簽約(註冊和實例化),那麼即使它沒有 發生即沒有處理程序將被稱爲出版。
場景: 如果我使用可以說,作爲我們的用戶,也出版商和服務subsriber實例尚未創建和事件被觸發,可以做些什麼來WCF服務處理這一點,因爲此時用戶實例尚未創建。 (雖然註冊已完成)。
注意:我正在訂閱服務的ctor中的事件。
因此,簡而言之,我期望在發佈(事件觸發器調用)之前確保所有訂閱者都是instanstiated的。
可能的解決方案:我在看Unity應用程序塊來解決這種依賴性,但想要發現,如果這是正確的方向。爲了這個目的,我想在的global.asax.cs應用程序啓動方法做這樣的事情的:
IUnityContainer container = new UnityContainer();
container.RegisterType<ISubscribeEvent ,EventSubsriber>();
,然後我可以
EventPublisher = container.Resolve<EventPublisher>();
其中EventPublisher類的構造函數是
public EventPublisher(ISubscribeEvent obj)
{
}
其中ISubscribeEvent將成爲每個用戶將實現的接口。所以無論何時發生事件,實現ISubscribeEvent接口的類都將被實例化。
這種方法有意義嗎?有沒有其他的選擇?
編輯:
事件將發生在服務器和用戶也將是服務器即服務呼叫服務將無法通過該通道,但作爲普通類調用回事服務。
更新: 我還看了IInstanceProvider here,因爲它可以提供一個接口,它可以用於控制使用Unity.WCF WCF服務實例的實例化。
我最初做了一些研究,看到http://stackoverflow.com/questions/1591829/prism-and-wcf-do-they-play-nice?rq=1,它讓我想到WCF和Prism事件可能會附和。如果我使用基礎架構模塊來訂閱事件,並且可以減輕無實例用戶的可能性,那麼我可以解決問題。你同意或者我應該放棄這種方法。感謝您的輸入。 –
另外請檢查我的編輯:) –
如果發生這種情況發生在服務器上,讓其他一些長壽命物體成爲訂戶。具體來說,看看應該爲這種長期生活任務提供基礎設施的Hangfire庫。 –