我将代码从NSBv4迁移到NSBv5(准确地说是5.2.12)并且我有一个自定义配置文件实现:
public class MyProfileHandler : IHandleProfile<PerformanceCounters>
{
public MyProfileHandler()
{
}
public void ProfileActivated(BusConfiguration config)
{
// I need to do something based on endpoint configuration, e.g. endpoint name
// this used to work in NSBv4:
// var endpointName = Configure.EndpointName;
}
}
如何在此处访问端点配置?
我使用NServiceBus.Host托管此应用程序(如果重要的话是v6.0.0),这就是IHandleProfile<T>
界面的来源。
BusConfiguration
是一个配置构建器,似乎无法从中读取任何有用的东西。我试图将Configure
的实例注入我的配置文件处理程序的构造函数,但随后崩溃 - NSB需要处理程序具有无参数构造函数。
实现IWantTheEndpointConfig
也不是一个选项,因为它在v5中已弃用,并且会导致编译错误。其过时的错误消息指出:
的实例
IHandleProfile
现在传递了Configure
(这对我的情况来说是完美的),但据我所知,这是不正确的(没有Configure
传递给ProfileActivated()
,我无法看到我的情况可以注射它。)
我唯一的选择是使用完全不同的方法重新实现配置文件处理程序,还是我错过了什么?
答案 0 :(得分:1)
NServiceBus.Core有一个问题,它如何在BusConfiguration上设置端点名称(不幸的是端点版本)。设置的端点名称太晚了添加到设置字典中。您可以通过执行以下操作来解决该问题:
public class EndpointConfig : IConfigureThisEndpoint
{
public void Customize(BusConfiguration configuration)
{
var customConfig = new EndpointConfiguration
{
EndpointName = "YourEndpointName",
};
configuration.EndpointName(customConfig.EndpointName);
configuration.GetSettings().Set<EndpointConfiguration>(customConfig);
}
}
public class EndpointConfiguration
{
public string EndpointName { get; set; }
}
BusConfiguration
本质上是关于类固醇的字典。如果要访问配置文件处理程序中BusConfiguration
中设置的内容,可以执行以下操作(i.ex.获取端点名称):
public class MyProfileHandler : IHandleProfile<PerformanceCounters>
{
public void ProfileActivated(BusConfiguration config)
{
var customConfig = config.GetSettings().Get<EndpointConfiguration>();
var endpointName = customConfig.EndpointName;
}
}
答案 1 :(得分:0)
在普通的NServiceBus主机中,该接口仅提供一个参数BusConfiguration
。在Azure上,该接口提供了两种方法,其中一种方法实际上具有Configure
对象。