2015-06-03 110 views
0

我嘗試爲我的NServiceBus配置WebApi。我試過這個:https://coderkarl.wordpress.com/2012/03/16/injecting-nservicebus-into-asp-net-webapi/NServiceBus和ApiController

問題是語法在最新的NServiceBus-Versin中被改變了。我無法使用配置類的函數,因爲它們將在更多版本中被刪除。配置總線的新方法是使用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版?

回答

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

因爲這是而不是這是一個很好的做法,希望回覆消息在發送後回來。

0

ForWebApi從來不是NServiceBus的一部分,它是用於配置NServiceBus依賴關係解析器來實例化控制器的示例的擴展方法。它如何完成的方式顯示爲here

沒有必要使用NServiceBus解析器,因爲它僅僅是圍繞另一個容器的包裝。默認情況下它使用Autofac,所以你可以在整個應用程序中使用Autofac來爲你工作。

Autofac的WebAPI的集成是在documentation正確描述。

NServiceBus文檔有關於使用您自己的容器的page

這是一個非常著名的設置,你可以很容易地實現。

1

Here你可以看到3.0 VS 4.0和5.0的配置語法。在頁面的頂部,你有一個下載代碼示例的鏈接。

的例子是ASP .NET的,所以你需要稍微調整它的WebAPI。讓我知道你是否需要進一步的幫助。