Хорошо ли использовать AspNetCore Http dll в сервисном слое приложения? - PullRequest
0 голосов
/ 19 ноября 2018

Чтобы дать вам некоторый контекст:

Я создал мультитенантное веб-приложение.

Здесь для любого запроса выполняются следующие шаги

1. Fetch the user information such as ID from HttpContext object
2. Then getting the approprate db name from a common db.
3. Updating the dbContext with the db name
4. And all my repository classes are instantiated based on this updated dbContext 

Первые 2 шага выполняются в проекте библиотеки классов (сервисный уровень), где для получения идентификатора пользователя я должен получить доступ к объекту HttpContext, для которого AspNetCore.Http.dll ссылается вручную . (Взял dll, скопировал в папку и добавил в проект)

Каков будет правильный способ сделать это? Является ли это лучшей идеей использовать библиотеки NetCore в проекте библиотеки классов?

1 Ответ

0 голосов
/ 19 ноября 2018

Не совсем понятно, что вы здесь делаете, но что касается HttpContext, есть несколько моментов, которые должны вам помочь:

  1. Недостаточно иметь ссылку.Тот факт, что вам пришлось вручную удалить DLL, лишь увеличивает вероятность того, что это не сработает.HttpContext существует только в контексте конвейера запросов.Независимо от того, сможете ли вы получить какой-то фрагмент кода для компиляции, если он не работает внутри этого конвейера, HttpContext будет для вас нулевым и бесполезным.

  2. Библиотечные классы обычно не должны иметьзависимости от таких вещей, как HttpContext, в любом случае.Если вам нужно что-то вроде идентификатора пользователя в классе библиотеки, этот идентификатор самого пользователя должен быть передан в конструктор или метод (в зависимости от того, какой из них наиболее целесообразен).Логика получения идентификатора пользователя из HttpContext заключается в знании предметной области, которого ваш класс, вероятно, не должен иметь.

  3. Если вы собираетесь использовать HttpContext напрямую, выследует ввести IHttpContextAccessor.Для этого вам потребуется добавить службу в ваше приложение ASP.NET Core, используя services.AddHttpContextAccessor().Как только вы это сделаете, вы можете получить текущий запрос HttpContext через этот экземпляр метода доступа.Если вы находитесь за пределами конвейера запросов, он все равно будет нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...