使用统一容器获取BusHealth的实例

问题描述

如何在Prism中使用Unity容器IoC或不使用IoC容器来获取bushealth的实例? Mass Transit依赖于Microsoft Dependency Injection,但是我使用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 =>
    {
        // ...
    });
});

当然,这并不能解释总线/运行状况对象如何进入您的容器,但我认为您已经明白了。