【发布时间】:2011-10-15 19:28:21
【问题描述】:
在 Caliburn.Micro 文档中,作者提到了这种可能性:
IHandle 继承自标记接口 IHandle。这允许使用强制转换来确定对象实例是否订阅了任何事件。如果您与 IoC 容器集成,这将启用简单的自动订阅。大多数 IoC 容器(包括 SimpleContainer)都提供了一个钩子,用于在创建新实例时调用。只需连接容器的回调,检查正在创建的实例以查看它是否实现了 IHandle,如果是,则在事件聚合器上调用订阅。
如何使用 Autofac 实现这一目标?
我尝试利用decorator的功能,但对于这种情况当然有点不合适。此外,默认情况下,我的 IHandle 实现者不会在容器中注册为 IHandle 的实例。
P.S.提供这个不正确的实现以防万一它可能有用,虽然我怀疑。
builder.RegisterInstance<IEventAggregator>(new EventAggregator());
builder.RegisterDecorator<IHandle>((container, handler) =>
{
var eventAggregator = container.Resolve<IEventAggregator>();
eventAggregator.Subscribe(handler);
return handler;
}, "unsubscribed", "subscribed");
【问题讨论】:
标签: wpf messaging autofac caliburn.micro eventaggregator