0

我正在将代码从 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(),我看不到如何注入它)。

我是使用完全不同的方法重新实现配置文件处理程序的唯一选择,还是我遗漏了什么?

4

2 回答 2

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配置文件处理程序中设置的内容,您可以执行以下操作(即获取端点名称):

public class MyProfileHandler : IHandleProfile<PerformanceCounters>
{
    public void ProfileActivated(BusConfiguration config)
    {
        var customConfig = config.GetSettings().Get<EndpointConfiguration>();
        var endpointName = customConfig.EndpointName;
    }
}
于 2015-12-18T07:26:56.530 回答
0

在普通的 NServiceBus 主机中,接口只提供一个参数,BusConfiguration. 在 Azure 上,接口提供了两种方法,其中一种方法实际上是Configure对象。

于 2015-12-15T13:01:06.903 回答