8 Stimmen

Caliburn.Micro. Automatischer Aufruf von eventaggregator.Subscribe() für IHandle-Implementierer mit Autofac

En Caliburn.Micro Dokumentation erwähnen die Autoren diese Möglichkeit:

Link zur Dokumentation

IHandle erbt von einer Marker-Schnittstelle IHandle. Dies ermöglicht die Verwendung von Casting, um festzustellen, ob eine Objektinstanz irgendwelche Ereignisse abonniert. Dies ermöglicht ein einfaches automatisches Abonnieren, wenn Sie einen IoC-Container integrieren. Die meisten IoC-Container (einschließlich SimpleContainer) bieten einen Hook, der aufgerufen wird, wenn eine neue Instanz erstellt wird. Suchen Sie einfach den Callback Ihres Containers, überprüfen Sie die erstellte Instanz, um zu sehen, ob sie IHandle implementiert, und wenn ja, rufen Sie Subscribe auf dem Event Aggregator auf.

Wie lässt sich dies mit Autofac erreichen?

Ich habe versucht, die Funktionen von Tapezierer aber das ist in diesem Fall natürlich nicht angebracht. Außerdem sind meine Implementatoren von IHandle<> werden nicht als Instanzen von IHandle innerhalb des Containers.

P.S. Die Bereitstellung dieser unsachgemäß Umsetzung, nur für den Fall, dass sie von Nutzen sein könnte, was ich allerdings bezweifle.

builder.RegisterInstance<IEventAggregator>(new EventAggregator());
builder.RegisterDecorator<IHandle>((container, handler) =>
{
    var eventAggregator = container.Resolve<IEventAggregator>();
    eventAggregator.Subscribe(handler);
    return handler;
}, "unsubscribed", "subscribed");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X