Я использую Unity, чтобы зарегистрировать все свои обработчик событий домена, как, например:Unity решения родовых обработчики событий
public static void RegisterTypes(IUnityContainer container)
{
container.RegisterType<IDomainEventHandler<ProductCreated>, ProductCreatedHandler>(new PerRequestLifetimeManager());
}
Моего обработчик выглядит следующим образом:
public class ProductCreatedHandler : IDomainEventHandler<ProductCreated>
{
public void Handle(ProductCreated domainEvent)
{
// Handle the event
}
}
Мое событие домен выглядит следующим образом:
public class ProductCreated : IDomainEvent
{
private Product product;
public ProductCreated(Product product)
{
this.product = product;
}
}
И я поднимаю это событие с помощью:
var product = new Product()
{
ProductGuid = Guid.NewGuid().ToString(),
ProductCode = productCode,
ProductName = productName,
};
DomainEvents.Raise<ProductCreated>(new ProductCreated(product));
И обрабатывать поднятые события со следующим кодом:
public static void Raise<T>(T args) where T : IDomainEvent
{
if (Container != null)
{
foreach (var handler in Container.ResolveAll<IDomainEventHandler<T>>())
{
handler.Handle(args);
}
}
}
Использование инспектора, T
является ProductCreated
типа, но Container.ResolveAll<IDomainEventHandler<T>>()
ничего не решает, даже если через инспектор я могу видеть, что Container
делает имеют регистрацию зарегистрированного типа IDomainEventHandler
с отображаемым типом ProductCreatedHandler
Почему контейнер не разрешает общий тип, который я регистрирую в начале?