En Caliburn.Micro Dokumentation erwähnen die Autoren diese Möglichkeit:
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");