在 ASP.Net Boilerplate 中,从应用程序服务层调用 SignalR Hub 是一种不好的做法吗?

Pie*_*Luc 7 c# signalr-hub aspnetboilerplate



我将 Asp.Net 样板模板与 ASP.Net Core 2.1 一起使用。
我在 Web.Core 程序集中实现了一个集线器并创建了一个控制器。
我可以从任何客户端使用我的集线器订阅/通知数据,这不是我的问题。

我想在应用程序服务层中使用此集线器,但默认情况下应用程序服务层不引用SignalR。

所以我的问题是:
在应用程序服务层引用 SignalR 是一种不好的做法吗?

提前致谢 !

问候, 皮埃尔-吕克

hik*_*kan 6

在应用层直接依赖 Web 功能并不是一个好的做法。因为,假设表示层独立。

我认为你有几个选择;

  1. 如果您认为您从不更改SignalR并且从不使用其他应用程序的应用程序层,那么您可以直接引用SignalR并使用它。不过,这应该是最坏的情况。
  2. 在应用层抽象SignalR通信(定义一个接口)并在Web层实现。在这种情况下,最好在应用程序层定义一个 Null 实现(如果您不知道,请搜索“空对象模式”)以消除依赖性并允许应用程序层无需 SignalR 即可使用。
  3. 如果您的应用程序层无法使用 null 实现(也许它需要客户端的真实答案),那么您应该考虑将 SignalR 依赖的代码移至 Web 层。

所以,就像任何好的答案一样,这取决于:)