我正在构建NServiceBus网关处理程序,我需要避免使用配置文件,以便在c#类中定义所有配置。因此,我必须将以下部分转换为c#代码
<GatewayConfig>
<Channels>
<Channel Address="http://localhost:25899/SiteB/" ChannelType="Http" Default="true"/>
</Channels>
</GatewayConfig>
我在NServiceBus.Config命名空间中找到了GatewayConfig,ChannelCollection和ChannelConfig,但我无法将它们链接在一起,因为GatewayConfig引用了ChannelCollection,但ChannelCollection与ChannelConfig无关。请帮忙
答案 0 :(得分:2)
只需创建一个实现GatewayConfig的IProvideConfiguration的类。这为您提供了一种提供自己配置的方法。请查看pubsub示例,了解有关如何执行此操作的详细信息。
答案 1 :(得分:1)
好吧,我已经找到了这样做的方法,因为我安装了Reflector并查看了实现。有一个ChannelCollection.CreateNewElement()方法返回System.Configuration.ConfigurationElement。 NServiceBus覆盖了在其中实例化ChannelConfig的方法,所以我所要做的就是将ConfigurationElement类型转换为ChannelConfig类型,这远远不是直观的界面。看起来这个NServiceBus.Config.ChannelCollection是一种未完成的工作,因为如果你看看像NServiceBus.Config.MessageEndpointMappingCollection这样的其他集合你可以找到所有必要的类型安全方法来处理它的子元素NServiceBus.Config.MessageEndpointMapping,所以我认为NServiceBus团队只是懒得为ChannelCollection做同样的事情。
更新:由于CreateNewElement()方法受到保护,我必须实现自己继承自ChannelCollection的类,以使方法添加新的ChannelConfig元素公开可用