我尝试为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版管理了它吗?
答案 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。
这是一个众所周知的设置,您可以轻松实现。