首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CommonDomain和NEventStore中使用接口作为事件?

如何在CommonDomain和NEventStore中使用接口作为事件?
EN

Stack Overflow用户
提问于 2011-09-02 12:06:35
回答 1查看 740关注 0票数 0

我正在使用JOlivers CommonDomain和EventStore以及NServiceBus进行测试。我需要在我的集合中提出这样一个事件:

代码语言:javascript
复制
RaiseEvent(bus.CreateInstance<IPhoneNumberChanged>(m => { m.Number = number; }));

然后我有了一个处理程序:

代码语言:javascript
复制
private void Apply(IPhoneNumberChanged phoneNumberChangedEvent)
{
    this.Number = phoneNumberChangedEvent.Number;
}

不幸的是这不起作用。我得到了一个例外:类型为'Phone‘的"CommonDomain.Core.HandlerForDomainEventNotFoundException:聚合引发了一个'IPhoneNumberChanged’类型的事件,但无法找到处理该消息的处理程序。“

这里的问题是从"bus.CreateInstance“创建的对象,因为它与纯具体类一起工作。但我需要我的事件作为接口。这个问题能解决吗?

编辑:只是一个注释-我不需要使用"bus.CreateInstance“来创建对象,这只是我目前必须提高'IPhoneNumberChanged‘的最简单的方式。任何其他方式都是很棒的--只要我在处理程序中有一个作为参数的接口。

EN

回答 1

Stack Overflow用户

发布于 2011-09-03 20:30:34

在电话聚合的构造函数中,只需添加以下内容:

代码语言:javascript
复制
this.Register<IPhoneNumberChanged>(this.Apply);

这就解决了例外情况。CommonDomain内部的默认内部路由机制是基于注册的路由器,而不是理解如何将事件传递到适当的句柄方法--所有这些都不需要使用反射。另一个路由器已经被编写,并且已经是CommonDomain项目的一部分,它使用反射,并且更基于约定。

一个关于你的事件名称的快速思考。与其说电话号码改变了,不如让事件说明电话号码更改的原因。从一个领域的角度来看,为什么某事总是更有趣和重要的是什么。一个电话号码改变的事实通常是不有趣的。事实是它改变了,因为那个人转移或者取消了他们的帐户或者其他什么--这很有趣,也很有可能也很重要。

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

https://stackoverflow.com/questions/7283161

复制
相关文章

相似问题

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