Внедрение полного модуля в ASP.Net MVC

Я разрабатываю мультитенантное приложение на основе ASP.Net MVC. В зависимости от настроек пользователя, сайт должен перенаправить на отдельный модуль/область для этого пользователя. Каждая область использует некоторые общие службы, однако внешний вид сайта и навигация совершенно разные для каждой области/модуля. Модели также переопределяются из базовой библиотеки, и нам нужны отдельные команды для разработки модулей (включая контроллеры, представления и модели).

Мы рассматриваем такие инструменты внедрения зависимостей, как Unity или Ninject. Вопрос в том, как мы вставляем полный модуль/область внутри основного веб-сайта. Часть «Контроллеры и модели» хорошо изучена. Что не ясно, так это то, как разрабатывать представления, чтобы поиск и использование правильных представлений.

ОБНОВЛЕНИЕ
Нам нужно разработать это приложение с разными командами. Каждая команда разработает модуль для каждого подсайта/области. Существует бизнес-уровень, который предоставляет общие услуги, структуру и рабочие процессы. MVC — это прежде всего уровень представления. Каждая команда разрабатывает дочерний сайт для каждого клиента, используя определенный брендинг для этого клиента. По мере того, как мы добавляем больше клиентов, нам нужно добавлять больше сайтов. Мы могли бы использовать темы и т. д. Однако у клиентов разные экраны и разный набор полей на каждом экране. Все эти поля собирают схожие данные, однако конечные пользователи играют разные роли для сбора данных. Например. Сотрудник фронт-офиса фиксирует разные номера. полей на одного клиента, а остальные заполняются техническим специалистом. Точно так же может быть более одного пользователя, обращенного к клиентам клиента (посетителям). Существует общий компонент, который используется для управления потоком посетителей, интерфейсными столами в каждом сеансе офиса и т. д. Вопрос в том, как мы можем независимо разработать подсайты MVC и перенести их на общий сайт, используя внедрение зависимостей. Особенно взгляды. Является ли сценарий развертывания единственным вариантом?


person Hemant    schedule 04.06.2013    source источник


Ответы (1)


Насколько я понимаю.

Ваша цель — использовать внедрение зависимостей с чем-то вроде Ninject, чтобы вы могли внедрять различные реализации на основе контроллера в определенной области, используемой в вашем приложении?

Если это так, вы можете настроить NinjectModules, которые связывают определенные реализации конкретной службы, определенной вашим интерфейсом или абстрактным классом, через атрибут Ninject Named, который вы можете поместить в свои конструкторы контроллеров.

Например, у вас может быть общий контроллер поиска, открытый для публики в такой области, как

http://example.com/пользователи/home/search

Используя Ninject Named Attribute, вы можете внедрить реализацию ISearchService, которая используется этим контроллером, что может предлагать ограниченный объем функций для общедоступных пользователей для поиска свойств,

однако в другой области сайта, например, администратор или пользователи, размещающие свои свойства на сайте, могут получить больший доступ с помощью функции поиска.

http://example.com/арендаторы/home/search

Этот HomeController может иметь другую внедренную реализацию ISearchService, которая передается через его конструктор.

Просто убедитесь, что все ваши NinjectModules загружены в Global.asax.

Это можно найти в документации Ninject Contextual Bindings здесь

Я использую очень мало информации из того, что вы мне здесь дали, вы можете получить лучшие ответы, если предоставите немного больше контекста/примеров кода проблемы, с которой вы столкнулись, с учетом ваших соображений архитектурного дизайна.

person Patrick Magee    schedule 04.06.2013