有没有人有任何想法如何让两者结合在一起,以便我可以在类文件中注入 IBus?
我尝试下载 Official Nservicebus.Ninject 包,但它似乎通过 Nuget 受限于 Ninject 的 2.x 行。我继续下载源代码到 Ninject 的对象构建器。我正在经历几个试验和错误场景中的一些问题。
首先是 IBus 没有通过属性注入设置。这可能是我对如何使用 Objectbuilder 的误解,但我的印象是通过设置公共 IBus Bus {get; set;} 在程序集中的一个类上,它将为我设置。
然后,我沿着以下路线尝试了一些事情:
Configure.Instance.Builder.Build<IBus>()
这产生了以下结果:
Error activating IBus
More than one matching bindings are available.
Activation path:
1) Request for IBus
Suggestions:
1) Ensure that you have defined a binding for IBus only once.
如果我对 UnicastBus 而不是 IBus 做一个明确的请求,我会得到一个实例,但它会在 base.Activite 上用以下内容轰炸:
More than one matching bindings are available.
Activation path:
2) Injection of dependency IBus into property Bus of type TimeoutMessageConverter
1) Request for TimeoutMessageConverter
Suggestions:
1) Ensure that you have defined a binding for IBus only once.
我并没有声称自己是 ninject 大师(背景是 spring.net),因为这个项目交给了我,看我是否可以利用它现有的使用 Ninject 的基础设施并获取对总线的引用来调用来自调度程序的发布该项目。在一天的大部分时间里,我一直在旋转我的车轮。
这是 Ninject 正在加载的 NServiceBus 模块(设置取自另一个 SO 帖子):
public class NServiceBusModule : NinjectModule
{
public override void Load()
{
this.Bind<IBus>().ToConstant(this.CreateBus()).InSingletonScope();
}
private IBus CreateBus()
{
return Configure.With()
.DefineEndpointName("publishMe")
.NinjectBuilder(this.Kernel)
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.InMemorySubscriptionStorage()
.UnicastBus()
.CreateBus().Start(() =>
Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
}
}
我没有在 EndpointConfig 中利用任何 IWantCustomInitialization,因为我认为这就是获取总线引用所需的全部内容。
我有另一个想法,我可以继续将项目分开一点,我相信它会工作得很好(让网络应用程序——在 global.ascx 中设置总线——直接发布到端点并从那里开始),但尽量保持在项目大纲的初始要求范围内。
如果需要,我可以提供更多信息。