亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

隱藏接口后面的服務總線實現

隱藏接口后面的服務總線實現

C#
ITMISS 2022-07-23 17:41:28
我目前正在開展一個項目,該項目允許第 3 方連接到我們產品的消息代理。任務是提供這些第 3 方可以使用的庫。我希望能夠將 Mass Transit 或 NServiceBus 與其一起打包,但我想將這些細節隱藏在接口后面。我已經把服務總線本身隱藏起來了......public class MyServiceBus : IServiceBus {  private readonly MassTransit.IBus _bus;  private readonly MassTransit.IBusControl _busControl;  public PanelSawServiceBus(MassTransit.IBus bus, MassTransit.IBusControl busControl) {     _bus = bus;     _busControl = busControl;  }  public Task PublishAsync<T>(T message, CancellationToken token = default(CancellationToken)) where T : class =>     _bus.Publish(message, token);  public Task SendAsync<T>(T message, CancellationToken token = default(CancellationToken)) where T : class =>     (_bus as ISendEndpointProvider)?.Send(message, token);  public Task StartAsync() => _busControl.StartAsync();  public Task StopAsync() => _busControl.StopAsync();}不應允許供應商發布/發送消息,而應僅在消費。如何隱藏消息的使用,以便我可以打包服務總線庫而不暴露正在使用的庫?編輯 1 使用 Mass Transit 使用消息看起來像這樣public class MyConsumer : IConsumer<SomeMessage> {    public Task Consume(ConsumeContext<SomeMessage> ctx) => Task.CompletedTask;}在創建服務總線實例的引導期間,您可以定義您的消費者(Mass Transit 將在收到消息時構建它們)。var busControl = Bus.Factory.CreateUsingInMemory(config => {    config.ReceiveEndpoint("queue_name", endpointCfg => {        endpointCfg.Consumer<MyConsumer>();    }};我希望包裝器做的是讓開發人員說“使用隊列工廠,我想用這個隊列名稱構造一個實例,這里是實現隱藏總線技術接口的消費者接口的類型的名稱?!?我只是不知道我是否可以隱藏消費者。
查看完整描述

1 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

如果我理解正確,您希望防止您的代碼與 NServiceBus 或 MassTransit 耦合,并且您不想公開您使用的是哪一個。

首先,解耦:
通過定義自己的IServiceBus接口,您已經完成了部分工作。只要您的庫僅依賴于該接口而不依賴于任何實現,您就不應該耦合到任何一個。

為確保避免這種耦合,我會將具體實現保留在單獨的項目/庫中。您的“核心”域也不應該直接引用。如果您可以在沒有任何具體實現的情況下對代碼進行單元測試,那么您可以在實現之間自由切換。

當您發布您的庫時,您可以發布您的核心庫的組合以及您選擇的其接口的實現。

然后,隱藏使用了哪個實現:
至于不暴露是否使用NServiceBusor MassTransit,你不能。如果有人引用了您的庫并且它依賴于其中一個包,那么他們也必須添加該包。假設您的庫是為 NuGet 打包的,該包將顯示其依賴項。


查看完整回答
反對 回復 2022-07-23
  • 1 回答
  • 0 關注
  • 96 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號