В документации Caliburn.Micro авторы упоминают такую возможность:
IHandle наследуется от интерфейса маркера IHandle. Это позволяет использовать приведение типов, чтобы определить, подписан ли экземпляр объекта на какие-либо события. Это обеспечивает простую автоматическую подписку при интеграции с контейнером IoC. Большинство контейнеров IoC (включая SimpleContainer) предоставляют ловушку для вызова при создании нового экземпляра. Просто подключитесь к обратному вызову вашего контейнера, проверьте создаваемый экземпляр, чтобы увидеть, реализует ли он IHandle, и если да, вызовите Subscribe в агрегаторе событий.
Как можно добиться этого с помощью Autofac?
Я пытался использовать возможности декоратора , но, конечно, это не подходит для этого случая. Более того, по умолчанию мои разработчики IHandle не регистрируются как экземпляры IHandle внутри контейнера.
P.S. Предоставление этой неправильной реализации на всякий случай, хотя я сомневаюсь, что она может быть полезна.
builder.RegisterInstance(new EventAggregator());
builder.RegisterDecorator((container, handler) =>
{
var eventAggregator = container.Resolve();
eventAggregator.Subscribe(handler);
return handler;
}, "unsubscribed", "subscribed");