Caliburn.Micro. Автоматически вызывать eventaggregator.Subscribe () для разработчиков IHandle с Autofac

В документации 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");

8
задан Alec 29 July 2011 в 09:22
поделиться