Asp.net mvc 4 使用ASP.NET MVC4和StructureMap配置NServiceBus

Asp.net mvc 4 使用ASP.NET MVC4和StructureMap配置NServiceBus,asp.net-mvc-4,dependency-injection,structuremap,nservicebus3,Asp.net Mvc 4,Dependency Injection,Structuremap,Nservicebus3,通过从nuget安装structuremap和structuremap.mvc4,我创建了一个ASP.NET mvc4 web应用程序。然后我添加了nservicebus和nservicebus.structuremap包,也来自nuget 我以前使用structuremap创建过两个mvc4应用程序,没有问题,我还使用nservicebus和structuremap学习了一些基本发布/订阅教程,并使其正常工作 然而,当我尝试将nservicebus与structuremap一起放入mvc4时,

通过从nuget安装structuremap和structuremap.mvc4,我创建了一个ASP.NET mvc4 web应用程序。然后我添加了nservicebus和nservicebus.structuremap包,也来自nuget

我以前使用structuremap创建过两个mvc4应用程序,没有问题,我还使用nservicebus和structuremap学习了一些基本发布/订阅教程,并使其正常工作

然而,当我尝试将nservicebus与structuremap一起放入mvc4时,效果并不理想。 我遇到的问题是,下面列出的针对mvc和具有mvc的DI的N服务总线教程似乎希望开发人员使用内置的依赖注入容器


如果您以前使用过structure map,nuget包会很好地添加解析器,并使用WebActivator运行初始设置。之后,我不确定容器会发生什么,因此无法使用它在Configure.With().StructureMapBuilder(StructureMapContainer)中设置NServiceBus生成器

为了使nservicebus和structuremap在asp.net MVC4中发挥良好的作用,我必须做些什么?我知道它的操作员错误,但我不确定此时该怎么办?另外,版本3是否有一个messageendpointconfig,其中包含一些漂亮的配置角色?这不适用于web环境吗?我想我可以得到一个容器的引用然后离开,但事实似乎并非如此

编辑:添加了一些代码

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();

        Configure.With()
            .StructureMapBuilder(ObjectFactory.Container) //this obviously won't work
            .JsonSerializer()
            .Log4Net()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(true)
            .UnicastBus()
                .ImpersonateSender(false)
            .CreateBus()
            .Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());

    }
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
用()配置
.StructureMapBuilder(ObjectFactory.Container)//这显然不起作用
.JsonSerializer()
.Log4Net()
.MsmqTransport()
.IsTransactional(错误)
.PurgeOnStartup(正确)
.UnicastBus()
.ImpersonateSender(错误)
.CreateBus()
.Start(()=>Configure.Instance.ForInstallationOn().Install());
}
编辑2: 即使我通过将依赖项解析器设置为Application_Start(),解决了StructureMap的问题,NServiceBus仍然希望在出现故障配置和MsmqTransportConfig的情况下配置MessageForwardingInCaseOfFaultConfig


我想我记得这些属性应该由通过endpoint config上的接口设置的角色自动配置?

您需要将这些部分添加到web.config文件中:

<configuration>
  <configSections>
    <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
  </configSections>

  <MessageForwardingInCaseOfFaultConfig ErrorQueue="error"/>
  <MsmqTransportConfig NumberOfWorkerThreads="1" MaxRetries="5"/>
</configuration>

NServiceBus v3不会自动创建这些