Внедрить настройки из библиотеки классов?

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

Библиотеке классов требуется строка подключения и ключ приложения.

Я знаю, что с nuget вы можете вводить настройки в файлы конфигурации, но я не использую nuget, поэтому мне интересно, есть ли у кого-нибудь какие-либо идеи, или мне нужно просто попробовать уловы и посмотреть, есть ли эти настройки в файлах конфигурации?


person chobo2    schedule 26.09.2012    source источник
comment
Как насчет того, чтобы проверить, присутствуют ли настройки, а затем генерировать исключения, если их нет.   -  person Adriaan Stander    schedule 26.09.2012
comment
Вы можете превратить необходимые настройки в параметры конструктора.   -  person cadrell0    schedule 26.09.2012
comment
@cadrell0 - я думал об этом, но код, на который я смотрю (который я хочу переместить в библиотеку), полностью статичен (поэтому, я думаю, у меня мог бы быть статический конструктор ??)   -  person chobo2    schedule 26.09.2012
comment
Статические конструкторы не могут иметь параметров, вам потребуется какой-то метод Initialize. Я стараюсь избегать этого, когда это возможно. Статичны ли методы, использующие настройки? Или просто они используют статические поля? Это начинает немного отходить от темы, но почему они статичны?   -  person cadrell0    schedule 26.09.2012
comment
Хм, я думал, что статический конструктор не будет работать. Я не писал код (я пытаюсь взять код и сделать его в библиотеке до того, как появится кнопка «копировать и вставить», и он есть в 10 разных проектах). Я думаю, что это просто статика, чтобы не создавать объект, но я еще не уверен на 100%.   -  person chobo2    schedule 26.09.2012
comment
Я думаю, что это просто статика, чтобы не создавать объект. Я бы не стал использовать статику в этом случае. Сделайте объекты. Это облегчит жизнь во многих отношениях.   -  person cadrell0    schedule 26.09.2012
comment
Кстати, на самом деле «да» пишется yeah, а не ya, если только вы не идиш, или пытается выразить недоверие Капитану Очевидность, как в Я думаю?   -  person Robert Harvey    schedule 26.09.2012
comment
@RobertHarvey, ты можешь быть моим героем.   -  person cadrell0    schedule 26.09.2012


Ответы (3)


Вы можете выбирать между различными типами решений:

  1. Вы можете сказать, что предоставление вам необходимой информации является обязанностью пользователя. поэтому вы просто убедитесь, что когда пользователь создает экземпляр вашего объекта, он дает вам необходимую информацию. Это довольно хороший вариант для библиотек классов. вы не хотите говорить, кто когда-либо будет использовать ваш код, как управлять его настройками. Допустим, у него свой способ сохранения конфигурации - зачем вам привязываться к конкретному типу конфигурации (System.Configuration).

  2. Если вы настаиваете на использовании app.config/web.config, вы можете просто использовать его для своей сборки и не использовать основной файл приложения. вы можете использовать ConfigurationManager.OpenExeConfiguration. чтобы узнать, откуда запускается ваша сборка, используйте Assembly.GetExecutingAssembly().Location. Таким образом, вы можете открыть свой собственный файл конфигурации, и просто убедиться в документации, что пользователь должен обновить настройки.

  3. вы можете просто сказать ему, что он должен указать информацию о конфигурации в своем app.config/web.config и выдать исключение, если ключ, который вы ищете, не существует...

person Shahar Gvirtz    schedule 26.09.2012

Попробуй это

http://ninjectconfigurer.codeplex.com/

После четкого прочтения вопроса приведенная выше ссылка не будет работать, но может работать следующее решение.

Недопустимая или ошибочная настройка действительно является проблемой времени компиляции. Вы можете использовать сценарий msbuild, чтобы проверить наличие обязательных параметров в файле app.config. Если нет, то при компиляции должна возникнуть ошибка.

Чтобы прочитать содержимое файла конфигурации, используйте задачу Xmlread msbuild — Чтение значения конфигурации в задаче MSBuild< /а>

Для отказа при отсутствующих настройках используйте условие ошибки для задачи Xmlread, как показано ниже (хотя и для другой задачи), и прикрепите эту задачу к файлу проекта, как показано:

Как завершить работу MSBuild при отсутствии файлов содержимого

person NiladriBose    schedule 26.09.2012
comment
Что это такое? Как это работает? Пожалуйста, предоставьте в своем ответе достаточно информации, чтобы он был полным, если ссылка не работает. - person cadrell0; 26.09.2012
comment
Я не понимаю, что это такое. Когда я говорю об инъекциях, я имею в виду автоматическую запись данных в конфигурационный файл, если он не существует. - person chobo2; 26.09.2012
comment
Хорошо, это позволяет вам вводить настройки в объекты на основе имени аргумента конструктора. Неверно истолкованный вопрос думал, что вы хотите избавиться от волшебных строк и попытаться поймать. - person NiladriBose; 26.09.2012

person    schedule
comment
Должен ли я делать это в конструкторе или в каждом методе? - person chobo2; 27.09.2012
comment
Если мы говорим о приложении Win, консоли или библиотеке, конструктор был бы хорошим подспорьем. Внутри веб-приложения я бы создал свой собственный класс, который наследуется от Page. Внутри этого класса я бы переопределял инициализацию страницы и проверял настройки. Все страницы, требующие этой проверки, просто должны наследоваться от моего класса. - person Gregor Primar; 27.09.2012
comment
так что простая логика в конструкторе + исключение исключений? - person chobo2; 27.09.2012