«Многопрофильность, похоже, совсем не работает» - это довольно неоднозначное утверждение, которое трудно рассмотреть. К сожалению, у меня лично нет времени, чтобы загрузить весь ваш пример кода и попытаться воспроизвести все это, отладить его и посмотреть, что именно не так. Возможно, кто-то еще. Тем не менее, я могу предложить несколько советов относительно мест, которые я посмотрю, и вещей, которые я попытаюсь увидеть, в чем дело.
Стратегия идентификации арендатора настроена дважды. Я вижу в Startup.ConfigureContainer
что есть строка builder.RegisterType<TerminalResolverStrategy>();
- она будет регистрировать тип вашей стратегии как экземпляр-на-зависимость, поэтому каждый раз, когда это необходимо, она разрешается для fre sh. Я также вижу в Startup.ConfigureMultitenantContainer
, что вы вручную создаете экземпляр стратегии, которая используется контейнером с несколькими арендаторами. Существует ненулевая вероятность того, что что-то там запуталось. Я бы выбрал один из способов сделать это - либо зарегистрировать стратегию, либо создать ее вручную - и я бы удостоверился, что это одноэлементный файл без сохранения состояния. (Это не зарегистрировано в примере.)
Возможно, сомнительный шаблон маршрута. Я вижу зарегистрированный шаблон маршрута выглядит следующим образом: {terminal}/{controller=Home}/{action=Index}/{id?}
. Я также вижу, что ваши URL-адреса выглядят так: https://localhost/app/terminal1
Вступили ли вы в свою стратегию идентификации арендатора, чтобы убедиться, что механизм разбора маршрута работает правильно? То есть app
не принимается за значение terminal
? Синтаксический анализ / обработка маршрута может быть сложным.
Возможно, неверные настройки. Стратегия идентификатора арендатора только успешно идентифицирует арендатора, если есть опции, которые указывают, что существует указанное значение c terminal
, Я не вижу, где настроены какие-либо из этих опций, что означает, что в этом репо не определены арендаторы. Ваша стратегия ничего не опознает без этого.
Если бы это был я, я бы, вероятно, начал с точки останова в этой стратегии идентификации арендатора и посмотрел, что решается, а что нет. Это кажется несколько сложным с внешней точки зрения, и именно здесь я начну. Если это сработает, то я, вероятно, также рассмотрю вопрос очистки регистраций, чтобы стратегия идентификации не регистрировалась дважды. Наконец, у меня сложилось впечатление, что это не весь код в приложении; Я бы, наверное, посмотрел на создание супер минимального репродукции размером примерно с тот, который вы на самом деле разместили здесь. Затем я бы сосредоточился на том, чтобы заставить это минимальное репро работать; затем, как только это сработает, я выясню, в чем разница между репро и моим большим приложением.
К сожалению, это все, что я могу вам предложить. Как я уже упоминал, с текущей средой и моей текущей рабочей нагрузкой я не смогу сесть и воспроизвести все это вместе с вашим кодом. Я знаю, что интеграция работает, потому что у меня есть производственные приложения, использующие ее; и есть много тестов (блок и интеграция) для проверки его работоспособности; так что часть, которая не работает, вероятно, где-то в вашем коде ... и это места, с которых я бы начал.