¿Cómo obtener una instancia de bushealth usando Unity container IoC en Prism o sin usar un contenedor IoC? Mass Transit se basa en Microsoft Dependency Injection, sin embargo, estoy usando Bus Factory para crear una instancia del bus y no siempre es factible usar DI para código heredado.

_busControl = Bus.Factory.CreateUsingRabbitMq(sbc =>
            {
                sbc.Host(host, h =>
                {
                    h.Username(username);
                    h.Password(password);
                    h.RequestedConnectionTimeout(timeout);
                });
                sbc.ReceiveEndpoint(e =>
                {
                    ...
                });
2
TrustyCoder 27 oct. 2020 a las 20:23

1 respuesta

La mejor respuesta

Puede crear una instancia de BusHealth pasando la instancia de bus en el constructor o puede registrar IBusHealth como un servicio en su contenedor, con el tipo de implementación BusHealth (que requerirá IBus para ser registrado también, ya que es una dependencia del constructor requerida).

Luego, puede usar la interfaz IBusHealth en su aplicación para verificar el estado del bus.

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 =>
    {
        // ...
    });
});

Por supuesto, esto no explica cómo los objetos de bus / salud entran en su contenedor, pero creo que entiendes la idea.

0
Chris Patterson 27 oct. 2020 a las 20:13