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

Ninject 3.0.0和Nservicebus 3.0.3->;关于配置的帮助?,ninject,nservicebus,Ninject,Nservicebus,有没有人想过如何将这两者结合起来,以便我可以在类文件中注入IBU 我试着下载官方的Nservicebus.Ninject包,但它似乎被限制在通过Nuget的Ninject的2.x行。我继续将源代码下载到Ninject的对象生成器中。我经历了几个试错的场景,遇到了一些问题 首先,IBU不是通过属性注入来设置的。这可能是我对Objectbuilder的使用方式的误解,但我的印象是,通过在程序集中的类上设置公共IBus总线{get;set;},它将为我设置 然后,我沿着以下路线尝试了一些东西: Con

有没有人想过如何将这两者结合起来,以便我可以在类文件中注入IBU

我试着下载官方的Nservicebus.Ninject包,但它似乎被限制在通过Nuget的Ninject的2.x行。我继续将源代码下载到Ninject的对象生成器中。我经历了几个试错的场景,遇到了一些问题

首先,IBU不是通过属性注入来设置的。这可能是我对Objectbuilder的使用方式的误解,但我的印象是,通过在程序集中的类上设置公共IBus总线{get;set;},它将为我设置

然后,我沿着以下路线尝试了一些东西:

Configure.Instance.Builder.Build<IBus>()
如果我对UnicastBus而不是IBU进行显式请求,我确实会得到一个实例,但它会在基础上爆炸

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.
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 post):

公共类NServiceBusModule:Ninject模块
{
公共覆盖无效负载()
{
this.Bind().ToConstant(this.CreateBus()).InSingletonScope();
}
专用IBus CreateBus()
{
返回Configure.With()
.DefineEndpointName(“publishMe”)
.NinjectBuilder(this.Kernel)
.XmlSerializer()
.MsmqTransport()
.IsTransaction(真)
.InMemorySubscriptionStorage()
.UnicastBus()
.CreateBus().Start(()=>
Configure.Instance.ForInstallationOn().Install());
}
}
我没有在EndpointConfig中利用任何IWantCustomInitialization,因为我认为这是获取总线引用所需的全部

我有另一个想法,我可以继续将项目分离出来,我相信这会很好(让web应用程序——在global.ascx中设置总线——直接发布到端点并从那里开始),但尽量保持在项目大纲的初始要求之内


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

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

  • 在代码中使用重新绑定
  • 只需调用
    CreateBus()
    ,而无需添加绑定

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

  • 在代码中使用重新绑定
  • 只需调用
    CreateBus()
    ,而无需添加绑定

  • 我是nservicebus ninject集成的原始作者。我还没有时间将其升级到NServiceBus 3.0。NServiceBus 3.0中还引入了一个新的工作范围单元,当前的ninject集成实现不支持该工作范围单元。Remo Gloor和我下周将在伦敦的Skills Matter会晤Udi Dahan,我们将尝试与Udi Dahans指南一起更新整合(如有必要)。同时,您应该为IBU定义一个绑定。这应该由基础设施自动处理。有什么消息吗?不幸的是,我即将放弃Ninject。很遗憾,这两个项目中的专家都需要编写DI集成。对我来说太复杂了!是的,我应该早点评论这件事。一路上的某个地方,另一个开发人员切换到autofac。没有什么不利于Ninject本身的,只是一些设计决策。我在Nservicebus论坛上看到了一些其他帖子,最近我相信Andreas说两个团队已经会面了,但没有提到时间框架。我还没有尝试Daniel和Tim的回答,因为我一直在研究这个新项目的其他领域。有人能够解决这个问题吗?我是nservicebus ninject集成的原始作者。我还没有时间将其升级到NServiceBus 3.0。NServiceBus 3.0中还引入了一个新的工作范围单元,当前的ninject集成实现不支持该工作范围单元。Remo Gloor和我下周将在伦敦的Skills Matter会晤Udi Dahan,我们将尝试与Udi Dahans指南一起更新整合(如有必要)。同时,您应该为IBU定义一个绑定。这应该由基础设施自动处理。有什么消息吗?不幸的是,我即将放弃Ninject。很遗憾,这两个项目中的专家都需要编写DI集成。对我来说太复杂了!是的,我应该早点评论这件事。一路上的某个地方,另一个开发人员切换到autofac。没有什么不利于Ninject本身的,只是一些设计决策。我在Nservicebus论坛上看到了一些其他帖子,最近我相信Andreas说两个团队已经会面了,但没有提到时间框架。我还没有尝试丹尼尔和蒂姆的回答,因为我一直在研究这个新项目的其他方面。有人能够解决这个问题吗?
    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());
        }
    
    
    }