【发布时间】:2016-03-16 07:26:22
【问题描述】:
似乎我不能多次定义命令/事件约定。每个注册的约定都将覆盖以前的约定。
这行得通:
configuration.Conventions()
.DefiningCommandsAs(
type => type.FullName == "MyProject1.CommandA" || type.FullName == "MyProject2.CommandB");
但这不是:
configuration.Conventions()
.DefiningCommandsAs(
type => type.FullName == "MyProject1.CommandA");
configuration.Conventions()
.DefiningCommandsAs(
type => type.FullName == "MyProject2.CommandB");
我为什么需要这个:
我正在开发一个曾经在 NSB 项目中引用的包,它将执行定期操作(发送消息)。它需要在INeedInitialization 中定义自己的命令约定,这些约定将在程序集扫描期间获取。我不希望包的用户知道他需要注册包的约定。但是宿主项目需要为命令注册自己的约定。所以目前看来我要么需要求助于标记接口(我不想这样做,引入不显眼模式是有充分理由的),要么提出所有命令必须驻留在 *.Commands 中的约定。 * 我也不喜欢的命名空间。
所以问题是如何让包注册它自己的约定,对主机不显眼且透明。
编辑
我能想到的另一种解决方法是实现共享约定单例并将约定注册委托给它。然后,该单例将记住所有约定,并且每次都会继续附加它们。不漂亮,但不比其他 2 个选项丑。
【问题讨论】:
-
抱歉,除了您提到的两个(标记和命令命名空间)之外,我认为这里没有任何选项。我会亲自使用 .commands 命名空间约定。
-
@TylerDay 谢谢,这就是我所怀疑的。如果 Particular 计划在 v6 中解决这个问题,有什么线索吗?
-
我不知道,但如果我不得不猜测,我会说这可能是设计使然,而不是错误。不过,这将是一个不错的功能。
标签: nservicebus convention unobtrusive