Загрузка страницы MVC создает несколько контроллеров с общими ресурсами - PullRequest
0 голосов
/ 07 января 2019

Я обнаружил, что во время загрузки главной страницы создается несколько контроллеров (я думаю, потому что главная страница состоит из нескольких частей). Контроллеры создают экземпляры классов API для запроса некоторых данных через них. Мне было интересно, как и где я мог бы использовать один и тот же экземпляр класса API между ними.

Я могу представить себе такой код:

class HomeController : Controller
{
   private MyApi Api;
   public HomeController()
   {
     this.Api = get the pervious MyApi instance form somewhere
     if (this.Api == null) // 1st time
     {
         this.Api = new MyApi();
         put this instance to somewhere to share between controllers
     }

Это "где-то" не является сессией, потому что для загрузки следующей страницы нужен другой экземпляр MyApi. Он должен перейти к свойству объекта, которое остается неизменным в течение всего процесса загрузки страницы, но отклоняется при генерировании html-результата. Должно быть, это действительно простая вещь, но я действительно не знаю, где это :( Может ли кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 07 января 2019

Вы можете рассмотреть возможность использования Microsoft Unity Framework в своем приложении.

Используя Unity Dependency Injector, вы сможете вводить экземпляры класса MyApi в любой контроллер и избегать записи «if (this.Api == null)» этих типов проверок, а также управлять их экземплярами в некотором сеансе или приложении. переменные уровня, что делает код грязным.

Для этой конкретной проблемы "Он должен перейти к свойству объекта, которое остается неизменным в течение всего процесса загрузки страницы, но отклоняется при генерировании html-результата". Вы можете настроить объект Unity Injected, чтобы иметь время жизни " Scoped ». Это означает, что объект будет создаваться один раз за запрос.

Вот ссылка на настройку Unity в основном приложении asp.net. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2

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