我已经阅读了所有文档和在NetCore中设置NServiceBuse的示例,但是所有示例的配置都在Program.cs
(Host.CreateDefaultBuilder().UseNServiceBus()
)中完成。
我想知道是否可以在ConfigureServices
的{{1}}方法中配置NServiceBus。
原因是在Program.cs
中,我建立了所有HostBuilder
选项(例如,从appsettings.json,EnvironmentVariables,AzureKeyVault,ConfigMaps等读取)和Logger实现。到IConfiguration
被调用时,所有这些都已解决。我需要能够从IConfiguration中获取诸如连接字符串之类的信息,因此我认为在HostBuilder中无法做到这一点。
似乎可能需要进行很多工作才能注入ConfigureServices
并扫描IMessageSession
实例。这应该可以在服务中完成。
编辑:忘记添加了,因为它在IHandlMessages
中,并且我们使用的是Serilog,所以我没有LoggerFactory。 LoggerFactory由服务注册和注入,但是在启动时我无法获得它。
答案 0 :(得分:0)
看起来这不是一个选择。我能够找到一种解决方法来使其全部正常运行,这只是将其放入Program()中,并确保在所有其他配置完成后才调用它。这似乎并不理想,而且似乎是netcore 3发展的反模式。
答案 1 :(得分:0)
我想补充一点,这是一个糟糕的设计选择。我应该能够在启动时注册我的东西,而且应该不会进行程序包扫描。
这是一个整洁的项目,但我认为对于任何非平凡的开发来说,它可能都缺乏。
原因是我想拥有一个具有多个端点的Web主机,而如果不运行两个完整实例(https://docs.particular.net/samples/hosting/generic-multi-hosting/),我将无法做到这一点。
我的工作流程是
只有处理了100余条消息(FIFO),才会处理#3中的消息。
我想要做的是有第二个队列(我们正在使用Azure服务总线)来监听工作程序更新并更新UI。
答案 2 :(得分:0)
尽管您已经有了解决方法,但我已经建立了与Serilog作为记录器和NServiceBus描述的设置类似的设置。您可以像这样访问Program.cs中的配置:
public static IHostBuilder CreateHostBuilder() =>
Host.CreateDefaultBuilder()
.ConfigureAppConfiguration()
.UseSerilog()
.UseNServiceBus(c => NServiceBusSetup.Configure(c.Configuration, c.HostingEnvironment))
在自制方法NServiceBus中。配置您可以设置端点。