nservicebus - 共享服务提供者 NServiceBus 和 ASPNET Core
问题描述
我正在创建一种通过 NServiceBus 发布集成事件的方法,这些事件是在处理程序中执行的操作中发布的。我选择的路径是从域层获取已发布事件的IIntegrationEventProvider
桥梁。IEventCollectionPublisher
public sealed class Bridge : IIntegrationEventProvider /* Infrastructure */,
IEventCollectionPublisher /* Domain */
{
private readonly List<object> _events = new List<object>();
void IEventCollectionPublisher.Publish(object domainEvent) { _events.Add(domainEvent): }
IReadOnlyCollection IIntegrationEventProvider.GetEvents() => _events;
}
由于 NServiceBus 有它自己的服务提供者 ( IBuilder
),我需要从IServiceProvider
可用于管道的类中解析执行应用程序操作的类ServiceScopedBehavior
。这样做我可以获得包含从域层发布的事件的桥实例,并使用 NServiceBus 将它们作为集成事件发布。
我发布了一个要点,其中包含(希望)掌握我想要实现的目标所需的代码片段。
问题是:我可以指示 NServiceBus 将调用委托给应用程序服务提供者,而不是构建它并复制所有指令endpoint.UserContainer<ServiceBuilder>()
吗?下面是一个例子
internal sealed class Handler : IHandleMessages<Command>
{
public async Task Handle(Command message, IMessageHandlerContext context)
{
// Resolved from ASPNET DI
var useCase = context.GetService<CommandUseCase>();
// _useCase is resolved NSB DI since injected from constructor
Debug.Assert(ReferenceEquals(useCase, _useCase), "");
await useCase.Execute().ConfigureAwait(false);
}
}
这样,我可以在处理程序构造函数中注入正确的作用域应用程序类,而不是IServiceProvider
从context.Extensions.Get<IServiceScope>().ServiceProvider
.
感谢帮助
问候
解决方案
我认为ASP.NET Core 集成示例可能很有用。从 7.2 版开始,在 ASP.NET 和 NServiceBus 之间共享 DI 基础结构要简单得多。还有一个专门的NServiceBus.Extensions.Hosting 适配器包添加了UseNServiceBus
API。
推荐阅读
- kubernetes - pod被删除或驱逐后,如何将pod的日志文件保留在节点中?
- python - 将项目添加到字典(字典内的数组?)
- javascript - Javascript:如何根据多个值过滤搜索结果(无论输入单词的顺序如何)
- fiware - 如何配置上下文代理以将传感器数据从 FiROS 传输到数据库?
- android-studio - 如何制作一个大网格,您只需定义一次它的元素应该如何表现?
- c# - 如何在每一页的 OpenHtmlToPdf 上添加页码?
- bitwise-operators - sha256 使用的位移类型
- python - 函数有时返回“None”,有时在嵌套递归调用中返回 1
- python - FastAPI 内存过滤
- flutter - 如何在 Flutter 中动态显示多个标记