Замок Виндзор с ASP.NET MVC 2 области - PullRequest
0 голосов
/ 10 апреля 2010

Прятался несколько месяцев и решил задать вопрос. Я очень новичок в Виндзоре и IoC в целом. Я могу заставить Виндзор работать с моим проектом MVC2 без проблем. Проект, над которым я работаю, представляет собой «портал» нескольких приложений в рамках одного проекта MVC2 с использованием новой концепции Areas. В этом сценарии каждая область фактически будет отдельным приложением внутри «портала». Мы делаем это для того, чтобы эффективно делиться МНОГО общего кода, представлений, аутентификации и функциональности между приложениями. Многие из наших приложений ссылаются друг на друга, поэтому после обсуждения было целесообразно объединить их в один проект.

Что мне интересно, как на самом деле разрешить различным областям вводить разные конкретные классы? В моем ограниченном понимании Application_Start управляет созданием контейнера и назначением его в качестве фабрики контроллеров. Я не обязательно хочу делать все инъекции на уровне приложения. У нас есть система конфигурации, где у нас есть файл config.xml в корне каждой области, и эти настройки переопределяют любые корневые настройки. Я хотел бы продолжить эту тенденцию, обеспечив возможность чтения инъекций для каждой области в файле config.xml (наследование, аналогичное webforms.config Webforms, где конфигурация в нижней папке переопределяет настройки в родительской папке).

Пример: у меня был бы ILogHandler, для которого потребовалась бы конкретная реализация в зависимости от того, в какой области приложения я нахожусь. Поэтому мне нужно будет вводить что-то другое в зависимости от того, где я нахожусь в приложении.

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

1 Ответ

0 голосов
/ 10 апреля 2010

Только к вашему сведению - вы абсолютно не должны иметь код безопасности для конкретной области. Например, фабрика или инициатор, который вставляет атрибуты [Authorize] в зависимости от текущей области, может открыть ваше приложение для атаки.

Сравните это с MyAreaBaseController, который должен быть подклассом всех контроллеров в вашем регионе. Атрибуты [Authorize] (и другой код, связанный с безопасностью) в порядке, поскольку они применяются к типу и не зависят от понятия «область».

...