0

我通过从 nuget 安装 structuremap 和 structuremap.mvc4 创建了一个 ASP.NET MVC 4 Web 应用程序。然后我添加了同样来自 nuget 的 nservicebus 和 nservicebus.structuremap 包。

我之前用结构映射创建了几个 mvc4 应用程序,没有任何问题,并且我遵循了一些关于使用 nservicebus 和结构映射的基本 pub/sub 教程并让它工作。

但是,当我尝试时,将 nservicebus 放入带有结构映射的 mvc4 并不能很好地工作。我遇到的问题是下面列出的 mvc 和 DI 与 MVC 的 nservice 总线教程似乎希望开发人员使用内置的依赖注入容器。

http://support.nservicebus.com/customer/portal/articles/894008
http://support.nservicebus.com/customer/portal/articles/894123

如果您以前使用过结构映射,那么 nuget 包会很好地添加解析器并使用 WebActivator 运行初始设置。之后,我不确定容器会发生什么,所以我无法使用它来设置 Configure.With().StructureMapBuilder(StructureMap Container) 中的 NServiceBus Builder。

为了使 nservicebus 和 structuremap 在 asp.net MVC4 中运行良好,我需要做什么?我知道它的操作员错误,但我不确定此时该怎么办?另外,版本 3 不是在某个地方有一个带有一些漂亮配置角色的 messageendpointconfig 吗?这不适用于网络环境吗?我想我可以得到一个容器的引用然后去,但情况似乎并非如此。

编辑:添加了一些代码

    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());

    }

编辑 2:即使我通过将依赖解析器设置为 Application_Start() 的位置来解决 StructureMap 的问题,NServiceBus 仍然需要配置 MessageForwardingInCaseOfFaultConfig 和 MsmqTransportConfig。

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

4

1 回答 1

1

您需要将这些部分添加到您的 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 不会自动创建这些!

于 2013-03-19T00:56:14.110 回答