有没有人找到一个聪明的方式来使用NServiceBus,而不必为所有消息实现无用的IMessage标记接口?NServiceBus没有用IMessage/NServiceBus引用我的解决方案垃圾邮件引用
尤其是,当使用DomainEvents时,我绝对不希望将我的域耦合到特定的服务总线实现。
有没有人找到一个聪明的方式来使用NServiceBus,而不必为所有消息实现无用的IMessage标记接口?NServiceBus没有用IMessage/NServiceBus引用我的解决方案垃圾邮件引用
尤其是,当使用DomainEvents时,我绝对不希望将我的域耦合到特定的服务总线实现。
需要IMessage接口,以便NServiceBus可以自动在串行器中注册这些类型。当使用域事件时,不建议直接在总线上发布它们 - 相反,域事件处理程序会将它们转换为服务级事件(它继承IMessage)。
您可能可以创建自己的接口来实现NSB标记接口,然后将NSB依赖项ILMerge到您自己的DLL中。这应该允许您只需要引用您自己的Dll并且不需要对NSB的外部引用。
它什么NSB确实为自己的依赖,所以你应该能够延长的想法,一定要,虽然检查出这种做法的缺陷 - 乌迪的博客上讲述它最近
半年后来,这个问题还没有解决(修正/改进)??
可能解决方案摘要: 1)ILMerge或.. 2)自定义包装消息的自定义分派器。
所有这些都是因为IMessage标记接口。
我刚刚注意到Udi正在给NServiceBus 3.0添加一个Unobtrusive Mode。看来 将解决这个问题。甚至有一个sample writeup,但你必须在此时(2012年2月)取消最新的github。如果你愿意忍受一些潜在的不稳定性来获得纯粹的POCO消息,你可以试一试。
嘿Udi,感谢您的快速回复! 当然,它是一个标记接口 - 但不得不重复域消息来服务消息增加了相当多的错误 - 95%的时间是1:1。我一定会想要避免这种情况,打字不是我最好的技能。 如果有某种可插拔的会议模块会告诉总线如何识别有效的消息(MEF,名称空间,类后缀,我自己的接口......),那将是非常好的。 我正在考虑使用一些像PostSharp这样的编织工,但我讨厌它为这个解决方案增加了复杂程度。 – Jan 2010-05-30 03:13:09
你可以使用类似AutoMapper的东西。 – 2010-05-31 03:16:02
我喜欢这个想法。如果只有MI ... – Jan 2010-08-05 19:15:27