Как загрузить в контейнер MassTransit EndPoint в AbstractFacility

У меня есть класс PersistenceFacility. Этот класс унаследовал "AbstractFacility" как "Castle.MicroKernel.Facilities". Интересно загрузить и установить в контейнер: IWindsorContainer.

public class PersistenceFacility: AbstractFacility
{
    protected override void Init()
    {

        ServiceIoC.Container.Register(Component.For<IBusControl>().LifeStyle.Singleton.UsingFactoryMethod(k =>
        {
            var busControl = Bus.Factory.CreateUsingRabbitMq(config =>
            {
                config.Host(new Uri("blabla"), host =>
                {
                    host.Username("guest");
                    host.Password("guest");
                });

                config.ReceiveEndpoint("", endpoint =>
                {
                    endpoint.EnableMessageScope();
                    // Above method works but it is deprecated, instead below method should be used to get Consumer from container.
                    //endPoint.Consumer<YourConsumer>(container.Kernel);
                });
            });

            return busControl;

        }).LifeStyle.Singleton.Named("XXXMassTransitRMQ"));

}

// класс установщика

public class PersistenceInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container?.AddFacility<PersistenceFacility>();
    }
}

//UOW Class

 public class UnitOfWork
{
     internal static IBusControl MassTransitRmqControl => ServiceIoC.Container?.Resolve<IBusControl>("XXXMassTransitRMQ");

}

1 ответ

Во-первых, я хотел бы рассмотреть возможность перехода на новую поддержку контейнеров для Windsor, как указано в документации.

Вы можете увидеть, как MassTransit регистрирует компоненты в Windsor, посмотрев конфигурацию.

Я не уверен, что абстрактное средство - это путь, учитывая подход, использованный ссылками, указанными выше.

Другие вопросы по тегам