NServiceBus和ApiController

时间:2015-06-03 14:57:02

标签: asp.net-web-api nservicebus

我尝试为WebApi配置我的NServiceBus。我试过这个:https://coderkarl.wordpress.com/2012/03/16/injecting-nservicebus-into-asp-net-webapi/

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

以下是较旧的代码:

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;
}

和Application_Start():

 AreaRegistration.RegisterAllAreas();

// Use LocalDB for Entity Framework by default
Database.DefaultConnectionFactory = new SqlConnectionFactory("Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");

RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);

BundleTable.Bundles.RegisterTemplateBundles();

Configure.WithWeb()
    .DefaultBuilder()
    .ForWebApi()   // <------ here is the line that registers it
    .Log4Net()
    .XmlSerializer()
    .MsmqTransport()
        .IsTransactional(false)
        .PurgeOnStartup(false)
    .UnicastBus()
        .ImpersonateSender(false)
    .CreateBus()
    .Start();

有人为NServiceBus第5版管理了它吗?

3 个答案:

答案 0 :(得分:1)

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

这些示例适用于ASP .NET,因此您需要为WebAPI稍微调整一下。如果您需要进一步的帮助,请告诉我。

答案 1 :(得分:1)

正如wlabaj所说,documentation on the particular website说明了一切。几乎。

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

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

我们在WebAPI和ASP.NET应用程序中做的是

NServiceBus.Bus.CreateSendOnly(configuration);

因为是一种很好的做法,希望回复邮件在发送后能够回来。

答案 2 :(得分:0)

ForWebApi从未成为NServiceBus的一部分,这是用于配置NServiceBus依赖项解析器以实例化控制器的示例的扩展方法。它的完成方式显示为here

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

Autofac WebAPI集成已在documentation

中正确描述

NServiceBus文档有一个关于使用您自己的容器的page

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