2011-08-10 14 views
2

私は、メッセージをIBusに公開しなければならないwcf ServiceHostを持っています。NServiceBusとwcf ServiceHost

ホストクラス(wcfによってinstatinされている)から正常にIBusにアクセスできますか?

+0

Stig、あなたはNServiceBus.Host.exeの中であなたのWCFサービスをホストしていますか? –

+0

はい私はwcfをNServiceBus.Host.exe – Stig

答えて

0

IWantToRunAtStartupを実装するクラスがあります(よりクリーンな方法があります)。このクラスには、NServiceBusに組み込まれたDIコンテナによって初期化されるIBusプロパティがあります。

次に、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クラスは、テスト対象のコードにそのアクセス権を与えます。 –

関連する問題