#c# #signalr-hub #aspnetboilerplate
#c# #signalr-hub #aspnetboilerplate
Вопрос:
Я использую Asp.Net шаблон шаблонного режима с ASP.Net Ядро 2.1.
Я реализовал концентратор в Интернете.Сборка ядра и создание контроллера.
Я могу подписывать / уведомлять данные с помощью моего концентратора от любого клиента, это не моя проблема.
Я хотел бы использовать этот концентратор на уровне служб приложений, но на SignalR уровень служб приложений по умолчанию не ссылается.
Итак, мой вопрос таков:
является ли плохой практикой ссылаться на SignalR на уровне служб приложений?
Заранее спасибо!
С уважением, Пьер-Люк
Комментарии:
1. ДА. Вы можете зарегистрировать интерфейс (с нулевой реализацией), который вы реализуете на веб-уровне.
2. Почему бы и нет, но как я могу тогда внедрить свой интерфейс? Сегодня я внедряю свой концентратор следующим образом: IHubContext<MyHub>
3. Внедрить
IMyNotifier
. Его реализация может внедрятьсяIHubContext<MyHub>
.4. Итак, я должен ссылаться на SignalR на уровне службы приложений?
5. На веб-уровне, как я уже упоминал в своем первом комментарии.
Ответ №1:
Прямая зависимость от веб-функции не является хорошей практикой на прикладном уровне. Потому что предполагается, что уровень представления независим.
Я думаю, у вас есть несколько вариантов;
- Если вы думаете, что вы никогда не меняете SignalR и никогда не используете прикладной уровень из другого приложения, тогда вы можете напрямую ссылаться на SignalR и использовать его. Однако это должно быть наихудшим случаем.
- Абстрагируйте связь SignalR (определите интерфейс) на уровне приложения и реализуйте ее на веб-уровне. В этом случае полезно определить нулевую реализацию (найдите «шаблон нулевого объекта», если вы не знаете) на прикладном уровне, чтобы удалить зависимость и позволить использовать прикладной уровень без SignalR.
- Если ваш прикладной уровень не может работать с реализацией null (возможно, ему нужен реальный ответ от клиента), тогда вам следует подумать о переносе вашего кода, зависящего от SignalR, на веб-уровень.
Итак, как и любой хороший ответ, это зависит 🙂