如何避免对 rebus 消息的编译时依赖性?

how to avoid compile time dependency to a rebus message?

我想通过上下文 A 引发的事件集成两个限界上下文并使用来自上下文 B 的事件。 我怎么想避免编译时间依赖性,所以上下文 B 不必包含上下文 A 的 dll's/libraries。(至少我不想每次都需要更新对 A 的引用的麻烦上下文 A 公开了新的事件类型。

是否有 prefered/best 对 Rebus 进行此操作的做法?

实际上有几种方法:)

就我而言,我更喜欢将消息作为单独的 NuGet 包分发 – 然后就需要查看 packages.config 以查看每个端点具有哪些依赖项。

只要我保持发布的消息模式不可变(即遵循严格的 append-only 方法来改进它),使用事件就没有问题——当反序列化为旧版本的消息架构。

但是,如果您希望端点的耦合度比这低,您可以做几件事。

除非您更改序列化程序,否则消息将序列化为 UTF8 编码 JSON。这意味着订阅者总是可以安装自己的 JSON 序列化程序,例如将消息反序列化为它自己的类型,或者简单地反序列化为 JObject(假设您使用的是 Newtonsoft JSON.NET)。

事实上 - 如果我没记错的话 - 您可以包含 NuGet 包 Rebus.NewtonsoftJson 并通过

使用它
Configure.With(new CastleWindsorContainerAdapter(container))
    .(...)
    .Serialization(s => s.UseNewtonsoftJson())
    .Start();

它结合了 Newtonsoft 的 JObject,然后您可以通过实现 IHandleMessages<JObject>.

在您的消息处理程序中使用它

希望能给你一些启发:)