Ninject 3.0.0和Nservicebus 3.0.3 - >有关配置的帮助?

时间:2012-04-11 15:47:58

标签: ninject nservicebus

有没有人想过如何让两人走到一起这样我才能在课堂档案上注入IBus?

我尝试下载官方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,因为我认为这是我需要获取对总线的引用。

我还有另外一个想法,我可以继续将项目分开,我相信它会工作得很好(有了web应用程序 - 在global.ascx中设置总线 - 直接发布到端点和从那里开始),但试图保持在项目大纲的初始要求之内。

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

1 个答案:

答案 0 :(得分:0)

NinjectBuilder添加IBus绑定。您有两种选择:

  1. 在代码中使用Rebind
  2. 只需拨打CreateBus(),无需添加绑定
  3. 即可