Bir etki alanı olayını yükselten aşağıdaki yöntemi kullanıyorum. Bir IDomainEvent
örneği, yönteme aktarılır ve SimpleInjector'ın GetAllInstances
yöntemiyle sağlanan IDomainEventHandler
örnekleri kullanılarak işlenir.SimpleInjector.GetAllInstances beklenmedik bir hata atıyor
public static void Raise<T>(T domainEvent) where T : IDomainEvent
{
if (Container != null)
{
var handlerType =
typeof(IDomainEventHandler<>).MakeGenericType(domainEvent.GetType());
var handlers = Container.GetAllInstances(handlerType);
foreach (dynamic handler in handlers)
{
handler.Handle((dynamic)domainEvent);
}
}
}
Container
bu yöntemi içeren sınıf önceden beslenir, ancak bir SimpleInjector IContainer
bir örneğidir:
yöntem bu gibi. IDomainEvent
benziyor
public class NewOrderEventHandler : IDomainEventHandler<NewOrderEvent>
{
public void Handle(NewOrderEvent args)
{
// Event handled here.
}
}
Ve örnek bir: Böyle bir NewOrderEvent
için
bir örnek IDomainEventHandler
görünüyor
public class NewOrderEvent : IDomainEvent
{
public IOrder Order { get; set; }
}
IDomainEventHandler<>
gibi SimpleInjector kayıtlıdır:
var assemblies = new[] {
// Other assemblies use this too
typeof(NewOrderEventHandler).Assembly, // Event Handlers
};
container.Register(typeof(IDomainEventHandler<>), assemblies);
Ne zaman tip IEnumerable<IDomainEventHandler<NewOrderEvent>>
için
Hiçbir kayıt bulunamadı: Ben şu istisna olsun, yöntem çalıştırın. Bununla birlikte, ,
IDomainEventHandler<NewOrderEvent>
için bir kayıttır;GetInstance<IDomainEventHandler<NewOrderEvent>>()
mu demek istediniz ya daIDomainEventHandler<NewOrderEvent>
?
Bunun neden çalışmadığını anlamıyorum - kimse yardımcı olabilir mi?
"RegisterCollection" yerine "Register" kullandığınız anlaşılıyor: Lütfen 'IDomainEventHandler' – qujck
@qujck OP'ye sahip kodu gösteren kodu gösterin. Container.Register (typeof (IDomainEventHandler <>), assembly) “Haklı olduğunu düşünüyorum. RegisterCollection yardımcı olmalıdır. –
@qujck Sorun buydu (kayıt kodu yukarıda). Bir cevap yazarsak, kabul edebilirim. – Graham