Я пишу приложение, которое использует мультитенантность, как обрисовано в общих чертах Заком Оуэнсом .
В примере с Заком у него есть отдельные библиотеки классов c # для хранения контроллеров и представлений для каждого арендатора. Поскольку я не использую движок Spark View, который имеет скомпилированные представления, это не вариант. Вместо этого я создал отдельный проект приложения MVC3 для каждого арендатора, и там я храню контент, контроллеры, представления и т. Д.
У меня есть основной проект приложения MVC (который является приложением для запуска) с настраиваемой фабрикой контроллеров, которая сканирует сборки, аналогичные примеру Zacks, и настраивает внедрение зависимостей, используя карту структуры. У меня есть движок представления, который использует контекст контроллера для получения правильного представления. Если он не может найти представление или зависимость в приложении арендаторов, он будет использовать представление или зависимость из нашего основного проекта приложения MVC. Все работает потрясающе, кроме когда дело доходит до моделей представления.
Большинство (если не все) наших представлений передаются модели представления. Я хотел бы, чтобы класс View Model находился в проекте приложения арендатора, а не в проекте основного приложения, чтобы у арендаторов могли быть пользовательские модели представления, соответствующие их собственным представлениям.
Кажется, что это будет работать, но я продолжаю получать ошибки.
Сценарий # 1 - Модели представлений по умолчанию находятся в основном проекте приложения MVC. Приложение Tenant имеет ссылку на Основное приложение и поэтому может использовать модели просмотра по умолчанию. Нет проблем. Теперь, когда я хочу добавить модель представления или переопределить модель представления, я создаю класс и помещаю его в приложение арендатора. Проблема заключается в том, что при вызове страницы основное приложение MVC не может найти новую модель представления, поскольку нет ссылки из основного приложения на приложение Tenant, и они не могут быть связаны с проблемами циклических ссылок.
Сценарий # 2 - Я удаляю ссылку из Приложения Арендатора на Основное Приложение. Затем я копирую модели представления по умолчанию из Основного приложения в Приложение Tenant, изменяю пространства имен и создаю ссылку из Основного приложения на Приложение Tenant, чтобы классы модели представления были доступны Основному приложению.
Затем я запускаю его и получаю следующую ошибку:
Элемент модели, передаваемый в словарь, имеет тип 'Sample.Models.Login', но для этого словаря требуется элемент модели типа 'Sample.Models.Login'.
Ошибка имеет смысл, но не совсем. У меня есть только один класс с именем Sample.Models.Login
У меня есть некоторые предположения о том, почему это может делать это, но я не могу понять это. Любые советы или рекомендации будут с благодарностью.
Спасибо