Asp.net web api N服务总线和ApiController

Asp.net web api N服务总线和ApiController,asp.net-web-api,nservicebus,Asp.net Web Api,Nservicebus,我尝试为WebApi配置NServiceBus。我试过这个: 问题是最新的NServiceBus版本中的语法已更改。我无法使用Configure类的函数,因为它们将在以后的版本中删除。配置总线的新方法是使用BusConfiguration类,但我不知道如何配置 以下是较旧的代码: public static Configure ForWebApi(this Configure configure) { // Register our http controller activator w

我尝试为WebApi配置NServiceBus。我试过这个:

问题是最新的NServiceBus版本中的语法已更改。我无法使用Configure类的函数,因为它们将在以后的版本中删除。配置总线的新方法是使用BusConfiguration类,但我不知道如何配置

以下是较旧的代码:

public static Configure ForWebApi(this Configure configure)
{
    // Register our http controller activator with NSB
    configure.Configurer.RegisterSingleton(typeof(IHttpControllerActivator),
        new NSBHttpControllerActivator());

    // Find every http controller class so that we can register it
    var controllers = Configure.TypesToScan
        .Where(t => typeof(IHttpController).IsAssignableFrom(t));

    // Register each http controller class with the NServiceBus container
    foreach (Type type in controllers)
        configure.Configurer.ConfigureComponent(type, ComponentCallModelEnum.Singlecall);

    // Set the WebApi dependency resolver to use our resolver
    GlobalConfiguration.Configuration.ServiceResolver.SetResolver(new NServiceBusResolverAdapter(configure.Builder));

    // Required by the fluent configuration semantics
    return configure;
}
和应用程序_Start():


是否有人为NServiceBus版本5管理过它?

ForWebApi从来都不是NServiceBus的一部分,这是示例中的一个扩展方法,用于配置NServiceBus依赖项解析程序以实例化控制器。展示了它是如何完成的

不需要使用NServiceBus解析器,因为它只是另一个容器的包装器。默认情况下,它使用Autofac,因此您可以使用Autofac在整个应用程序中为您工作

中正确描述了Autofac WebAPI集成

NServiceBus文档有一个关于使用您自己的容器的详细说明

这是一个众所周知的设置,您可以轻松实现。

您可以看到3.0 vs 4.0 vs 5.0配置语法。在页面顶部有一个下载代码示例的链接

不过,这些示例是针对ASP.NET的,因此您需要对WebAPI稍微进行调整。如果您需要进一步的帮助,请告诉我。

正如wlabaj所说的,这一切都可以做到。差不多

我们使用AutoFac,因此不需要直接引用IBus或ISendOnlyBus,因此我们这样做

ContainerBuilder builder = new ContainerBuilder();
var container = builder.Build();
configuration.UseContainer<AutofacBuilder>(x => x.ExistingLifetimeScope(container));
因为期望回复消息在发送后返回不是一个好的做法

ContainerBuilder builder = new ContainerBuilder();
var container = builder.Build();
configuration.UseContainer<AutofacBuilder>(x => x.ExistingLifetimeScope(container));
NServiceBus.Bus.CreateSendOnly(configuration);