Ich habe die folgende Methode, die ein Domänenereignis auslöst. Eine Instanz von IDomainEvent
wird an die Methode übergeben, und sie wird unter Verwendung von Instanzen verarbeitet, die von SimpleInjectors GetAllInstances
-Methode bereitgestellt werden.SimpleInjector.GetAllInstances wirft unerwarteten Fehler
Das Verfahren sieht wie folgt aus:
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
zuvor in der Klasse zugeführt wird, die dieses Verfahren enthält, aber es ist eine Instanz einer SimpleInjector IContainer
.
Ein Beispiel IDomainEventHandler
für eine NewOrderEvent
wie folgt aussieht:
public class NewOrderEventHandler : IDomainEventHandler<NewOrderEvent>
{
public void Handle(NewOrderEvent args)
{
// Event handled here.
}
}
und eine Probe IDomainEvent
wie folgt aussieht:
public class NewOrderEvent : IDomainEvent
{
public IOrder Order { get; set; }
}
Die IDomainEventHandler<>
mit SimpleInjector als solche registriert:
var assemblies = new[] {
// Other assemblies use this too
typeof(NewOrderEventHandler).Assembly, // Event Handlers
};
container.Register(typeof(IDomainEventHandler<>), assemblies);
Wann Ich betreibe das Verfahren, erhalte ich die folgende Ausnahme:
Keine Anmeldung für Typ
IEnumerable<IDomainEventHandler<NewOrderEvent>>
gefunden werden konnte. Dort ist jedoch eine Registrierung fürIDomainEventHandler<NewOrderEvent>
; Meinen Sie,GetInstance<IDomainEventHandler<NewOrderEvent>>()
oderIDomainEventHandler<NewOrderEvent>
zu rufen?
Ich verstehe nicht ganz, warum das nicht funktioniert - kann jemand helfen?
Es aussieht wie Sie verwenden 'Register' statt' RegisterCollection': zeigen Sie den Code, der die 'IDomainEventHandler' Registern – qujck
@qujck OP haben es hier' container.Register (typeof (IDomainEventHandler <>), Baugruppen) Ich glaube, du hast Recht. RegisterCollection sollte helfen. –
@qujck Das war das Problem (der Registrierungscode ist oben). Wenn Sie eine Antwort posten, kann ich sie akzeptieren. – Graham