Wie kann ich Ereignishandler in .NET-Ereignisse von Instanzen einfügen, die durch den IoC-Container Unity erstellt wurden?Wie Ereignishandler in Ereignisse mit Unity injiziert werden
Beispiel: Ich habe eine Klasse, die Fehler über ein Standard-.net-Ereignis meldet:
class CameraObserver
{
public event Action<Exception> UnhandledException;
[...]
}
Ich habe eine andere Klasse, die für den Umgang mit diesen Ereignissen reponsible ist:
class CrashMonitor
{
public static void HandleException(Exception x)
{ ... }
}
Was ich möchte, zu tun ist, den Handler von CrashMonitor automatisch zu jeder Instanz eines CameraObserver wie in diesem Pseudocode zu injizieren:
UnityContainer container = new UnityContainer();
container.RegisterInstance<Action<Exception>>(CrashMonitor.HandleException)
.RegisterType<CameraObserver>(new InjectionEvent(UnhandledException));
var observer = container.Resolve<CameraObserver>();
// CrashMonitor.HandleException is now attached to observer.UnhandledException
Gibt es eine Möglichkeit, dies mit Unity zu tun? Ich kann mir eine hässliche Problemumgehung vorstellen, wie die Ableitung von CameraObserver mit einem speziellen Konstruktor, der für die Abhängigkeitsinjektion oder eine Methodeninjektion gedacht ist. Aber das würde das System komplexer machen (weil Sie Code schreiben müssen). Ich würde naiv erwarten, dass Sie ein [Dependency] -Attribut für das Ereignis hinzufügen könnten und alles funktioniert.
Hey, Christian, hast du jemals etwas mehr darüber herausgefunden, oder hast du bei deinem ursprünglichen Custom Design geblieben? Ich versuche, Unity mit einem "reinen" MVVM-Design zu verwenden, das ursprünglich einen CloseCommand hatte, der von einem Basis-ViewModel geerbt wurde, wo ich einen Delegaten in einen benutzerdefinierten EventHandler übergab. Arbeitete großartig, bis ich versuchte, mit Unity alles zu injizieren, und dann brach es prompt. Wenn Sie eine Lösung haben, die mir gut tun könnte, würde ich einige Weisheit sehr schätzen. Vielen Dank! –