N服务总线和wcf服务主机

N服务总线和wcf服务主机,wcf,nservicebus,servicehost,Wcf,Nservicebus,Servicehost,我有一个wcf ServiceHost,它必须向IBus发布消息 如何从host类(由wcf安装)优雅地访问IBU?我们所做的(可能有更干净的方法)是我们有一个实现IWantToRunAtStartup的类。我们为该类提供一个IBus属性,该属性由内置在NServiceBus中的DI容器初始化 然后我们实例化Web服务类(具有ServiceBehavior属性的类),从启动类传入IBus实例。然后我们从该实例实例化ServiceHost 感觉有点笨拙,但我们没有遇到任何问题。希望这会有所帮助。这

我有一个wcf ServiceHost,它必须向IBus发布消息

如何从host类(由wcf安装)优雅地访问IBU?

我们所做的(可能有更干净的方法)是我们有一个实现IWantToRunAtStartup的类。我们为该类提供一个IBus属性,该属性由内置在NServiceBus中的DI容器初始化

然后我们实例化Web服务类(具有ServiceBehavior属性的类),从启动类传入IBus实例。然后我们从该实例实例化ServiceHost


感觉有点笨拙,但我们没有遇到任何问题。希望这会有所帮助。

这将使您能够更干净地访问IBU。根据需要命名静态类。不用担心共享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;
        }
    }
}
公共静态类总线访问
{
专用静态IBus总线;
公共静态IBus总线
{
得到
{
如果(总线==null)
bus=NServiceBus.Configure.Instance.Builder.Build();
回程巴士;
}
}
}

Stig,您是否在NServiceBus.Host.exe中托管WCF服务?是的,我在NServiceBus.Host.exe中托管wht WCF。谢谢,我没有注意到WCF服务可以通过实例实例化。可测试性不亚于IBus接口。这是由DI容器中配置的任何实现填充的,它只是在WCF实例化类中提供对它的访问。对于测试,创建一个实现IBus接口的TestableBus类,并在测试启动时对其进行配置。然后这个BusAccess类将为测试中的代码提供访问该类的权限。