首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Caliburn.Micro。用Autofac自动为IHandle实现者调用IHandle()

Caliburn.Micro。用Autofac自动为IHandle实现者调用IHandle()
EN

Stack Overflow用户
提问于 2011-07-29 09:22:36
回答 2查看 1.9K关注 0票数 8

Caliburn.Micro文档中,作者提到了这种可能性:

文档链接

IHandle从标记接口IHandle继承。这允许使用强制转换来确定对象实例是否订阅任何事件。如果您与IoC容器集成,这将支持简单的自动订阅。大多数IoC容器(包括SimpleContainer)提供了一个钩子,用于在创建新实例时调用。只需连接容器的回调,检查正在创建的实例,看看它是否实现了IHandle,如果实现了,则在事件聚合器上调用订阅。

如何使用Autofac实现这一目标?

我试图利用装饰师的特性,但这对这种情况来说当然是不合适的。此外,默认情况下,我的IHandle<>实现者不会将其注册为容器中的IHandle实例。

P.S.提供了该不适当的实现,以防它可能有任何用处,尽管我对此表示怀疑。

代码语言:javascript
运行
复制
builder.RegisterInstance<IEventAggregator>(new EventAggregator());
builder.RegisterDecorator<IHandle>((container, handler) =>
{
    var eventAggregator = container.Resolve<IEventAggregator>();
    eventAggregator.Subscribe(handler);
    return handler;
}, "unsubscribed", "subscribed");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-29 09:55:07

对卡利伯恩的工作方式做一些假设,我想你要找的是:

代码语言:javascript
运行
复制
builder.RegisterType<MyViewModel>();
builder.RegisterModule<AutoSubscribeHandlersModule>();

当模块实现时,如下所示:

代码语言:javascript
运行
复制
class AutoSubscribeHandersModule : Module
{
    protected override AttachToComponentRegistration(
        IComponentRegistry registry,
        IComponentRegistration registration)
    {
        if (typeof(IHandle).IsAssignableFrom(registration.Activator.LimitType))
        {
            registration.Activated += (sender, e) => {
                var aggregator = e.Context.Resolve<IEventAggregator>();
                aggregator.Subscribe((IHandle)e.Instance);
            };
        }
    }
}
票数 15
EN

Stack Overflow用户

发布于 2017-01-13 15:04:44

这是一个旧的帖子,但我想我应该加一个笔记到它。

可以使用Autofac中的构造函数注入处理程序:

代码语言:javascript
运行
复制
public MessageDispatcher(IEnumerable<IHandler> handlers)
{
    foreach (var handler in handlers)
        Subscribe(handler);
}

虽然上面的不是来自EventAggregator的Caliburn.Micro基类,但是您可以将其子类化,或者修改源代码来为EventAggregator提供自己的构造函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6871077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档