2

有没有人有任何想法如何让两者结合在一起,以便我可以在类文件中注入 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 中设置总线——直接发布到端点并从那里开始),但尽量保持在项目大纲的初始要求范围内。

如果需要,我可以提供更多信息。

4

1 回答 1

0

NinjectBuilder添加IBus绑定。你有两个选择:

  1. 在您的代码中使用重新绑定
  2. 只需调用CreateBus()而不添加绑定
于 2012-04-14T22:39:15.933 回答