使用统一容器获取 BusHealth 实例

Getting an instance of BusHealth using unity container

如何在 Prism 中使用 Unity 容器 IoC 或不使用 IoC 容器获取 bushealth 实例? Mass Transit 依赖于 Microsoft 依赖注入,但是我正在使用 Bus Factory 创建一个总线实例,并且它始终无法将 DI 用于遗留代码。

_busControl = Bus.Factory.CreateUsingRabbitMq(sbc =>
            {
                sbc.Host(host, h =>
                {
                    h.Username(username);
                    h.Password(password);
                    h.RequestedConnectionTimeout(timeout);
                });
                sbc.ReceiveEndpoint(e =>
                {
                    ...
                });

您可以创建 BusHealth 的实例,在构造函数上传递总线实例,或者您可以将 IBusHealth 注册为容器中的服务,实现类型为 BusHealth (这将需要 IBus 也被注册,因为它是必需的构造函数依赖项)。

然后您可以在您的应用程序中使用 IBusHealth 接口来检查总线健康状况。

var busHealth = new BusHealth("bus");

_busControl = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
    sbc.ConnectBusObserver(busHealth);
    sbc.ConnectEndpointConfigurationObserver(busHealth);

    sbc.Host(host, h =>
    {
        h.Username(username);
        h.Password(password);
        h.RequestedConnectionTimeout(timeout);
    });
    sbc.ReceiveEndpoint(e =>
    {
        // ...
    });
});

当然,这并没有解释 bus/health 对象如何进入您的容器,但我想您明白了。