Как загрузить в контейнер 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, посмотрев конфигурацию.
Я не уверен, что абстрактное средство - это путь, учитывая подход, использованный ссылками, указанными выше.