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类将为测试代码提供访问权限。 –