首页 > 解决方案 > 类库上的公共交通连接管理

问题描述

我正在尝试使用公共交通来处理请求响应。公共交通的大多数示例都是针对控制台应用程序或 Web 应用程序的,当我在类库中使用它时,我不知道如何在生产者上启动或停止总线。

因为在应用程序启动时启动的 Web 应用程序总线的示例中,但对于类库,没有像 startup.cs 这样的东西。

我的问题是当我使用类库连接到公共汽车时从哪里开始或停止公共汽车?

我的生产者代码看起来像

IBusControl busControl = CreateBus();
TaskUtil.Await(() => busControl.StartAsync());
IRequestClient<IAccountingRequest, IAccountingResponse> client = CreateRequestClient(busControl);
IAccountingResponse response = null;
AccountingRequest accountingRequest = MapToAccountingRequest(accountingIntegration);

Task.Run(async () =>
{
    response = await client.Request(accountingRequest);          
}).Wait();
busControl.Stop();

但我认为为每个请求启动和停止公共汽车并不好。

标签: c#masstransitbus

解决方案


您应该在您的类库中提供方法来启动/停止总线。您可以随意抽象它们,但允许开发人员启动和关闭总线。许多其他库对此,通常通过停止、关闭、关闭等方法。

您还在上面的示例中隐藏了任务并阻止/等待的事实让我觉得您陷入了无法避免的超级遗留问题。在这种情况下,好吧,我不得不这么说,但是在一些静态单例中管理对总线的引用(yuck),并在第一次使用它时启动它(double yuck),然后,尝试在应用程序退出时找到一个钩子阻止它清洁(祝你好运)。

最好的解决方案是让开发人员调用您的库以将其关闭,以便他们可以释放连接和资源。


推荐阅读