Пользовательские поставщики, передовой опыт и настройка конфигурации

Я уже некоторое время создаю веб-сайты с помощью ASP.NET. Сначала я избегал изучения тонкостей модели поставщика ASP.NET. Вместо этого я использовал готовых провайдеров там, где это было необходимо, и сильно полагался на фреймворки Dependency Injection для всех остальных нужд.

Однако в последнее время я пишу подключаемые компоненты для ASP.NET и, конечно же, пишу множество пользовательских решений на основе провайдеров, чтобы это произошло. Однако мне быстро стало ясно, что большая часть кода инициализации дублируется., что плохо.

So...

  1. Существуют ли какие-либо передовые методы, позволяющие избежать использования спагетти-кода конфигурации?
  2. Создали ли вы или у вас есть какие-либо примеры (базовые/вспомогательные классы, настраиваемые атрибуты, отражение), чтобы поделиться абстрагированием базового кода инициализации, чтобы упростить создание пользовательских поставщиков?

ПРИМЕЧАНИЕ:

Пожалуйста, не пытайтесь отправить меня на сайт Provider Toolkit. . Я уже исчерпал этот ресурс, поэтому обращаюсь к сообществу SO :)


person Josh    schedule 11.08.2009    source источник
comment
Я хотел бы предложить некоторую помощь, но я не совсем понимаю кое-что. Вы пишете подключаемые компоненты для ASP.NET и, конечно же, пишете множество пользовательских решений на основе провайдеров... Я не уверен, что именно вы подразумеваете под подключаемым компонентом или почему очевидно, что вы будете писать разные провайдеры для каждого компонента. Не могли бы вы уточнить, что вы пытаетесь сделать, и почему вам нужен другой поставщик для каждого компонента? Я посмотрю, могу ли я предложить некоторую помощь.   -  person jrista    schedule 28.08.2009
comment
Вы видели ЭЛЬМА? Я стремился писать компоненты, которые были бы сквозными по своим задачам, но не специфичными для предметной области/приложения. Модули, обработчики и т. д. Если они касаются любого типа хранилища, им необходимо использовать модель поставщика, чтобы быть действительно подключаемой (machine.config/web.config). Это не проблема, но я заметил, что в конечном итоге вы пишете много кода, чтобы просто управлять конфигурацией. Мне просто интересно, сделал ли кто-нибудь это достаточно, чтобы придумать некоторые передовые методы или даже некоторые служебные методы для общей обработки этого типа сантехнического кода.   -  person Josh    schedule 29.08.2009
comment
Это похоже на шаблон двойной блокировки для кэширования в веб-среде. Если вы что-то делаете с кешем, вы в конечном итоге пишете этот код, но обычно вы включаете его в какой-то служебный класс, который выполняет за вас тяжелую работу, поэтому вам не нужно писать его дважды. Есть много вещей, которые вы в конечном итоге делаете, управляя разделами конфигурации, и мне просто интересно, появились ли какие-либо шаблоны специально для этой проблемы. Я просто хочу быть как можно более СУХИМ.   -  person Josh    schedule 29.08.2009


Ответы (1)


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

Я разделил все на три проекта (плюс тесты):

  • Приложение - приложение asp.net mvc. модели, контроллеры и т.д.
  • Инфраструктура — IoC и интерфейсы
  • Infrastructure.Web - Провайдеры

Модель для пользователя и роли реализует интерфейсы из инфраструктуры, и эти классы регистрируются в IoC при запуске приложения. Затем провайдеры просят IoC разрешить классы и делают это. Таким образом, я могу добавлять что-то в модель и пользовательский интерфейс, используя одних и тех же провайдеров. Одна проблема, которую я заметил, заключается в том, что веб-сайт, запускаемый кнопкой «Конфигурация ASP.NET», не может использовать поставщиков, поскольку настройка выполняется в Application_Start, а «Конфигурация ASP.NET» — это другой веб-сайт. . Хотя я не вижу в этом проблемы.

person svinto    schedule 22.08.2009
comment
Я специально пытаюсь создать подключаемые компоненты, которые можно добавить в любой проект ASP.Net. Я бы хотел использовать IoC, но это исключило бы возможность использования одной DLL, которую можно было бы добавить в проект и работать. - person Josh; 24.08.2009
comment
Включите мини-IoC в свой компонент, попросите приложение зарегистрировать фабрику, которая реализует интерфейс в вашем компоненте, и предоставляет методы для создания соответствующих классов. - person svinto; 24.08.2009