2011-08-10 62 views
2

我有一個wcf ServiceHost必須發佈消息給IBus。NServiceBus和wcf ServiceHost

我如何優雅地從主機類(由wcf安裝)訪問IBus?

+0

Stig,你在NServiceBus.Host.exe中託管你的WCF服務嗎? –

+0

是的,我在託管wht wcf在NServiceBus.Host.exe – Stig

回答

0

我們做什麼(可能有一個更清晰的方法)是我們有一個實現了IWantToRunAtStartup的類。我們爲該類提供一個IBus屬性,該屬性由內置於NServiceBus中的DI容器初始化。

然後我們實例化我們的Web服務類(具有ServiceBehavior屬性的類),從啓動類傳入IBus實例。然後我們從這個實例中實例化我們的ServiceHost。

它感覺有點不舒服,但我們沒有任何麻煩。希望有所幫助。

+0

謝謝,錯過了一個wcf服務可以實例化的點。 – Stig

2

這應該讓您更清楚地訪問IBus。無論你想要什麼,命名靜態類。不要擔心共享IBus實例 - 總線是完全線程安全的。

public static class BusAccess 
{ 
    private static IBus bus; 

    public static IBus Bus 
    { 
     get 
     { 
      if (bus == null) 
       bus = NServiceBus.Configure.Instance.Builder.Build<IBus>(); 
      return bus; 
     } 
    } 
} 
+0

這是不可測試的 – Stig

+1

不低於IBus接口的可測試性。這充滿了在DI容器中配置的任何實現,它只是讓您在WCF實例化的類中訪問它。爲了進行測試,創建一個實現IBus接口並在測試啓動時對其進行配置的TestableBus類。然後,這個BusAccess類將爲測試代碼提供訪問權限。 –