Вопрос по web-config, asp.net, configuration, .net – Как получить доступ к пользовательской конфигурации из моего приложения библиотеки классов?

2
,

У меня есть пользовательский конфиг в моем Инфраструктурном проекте, но при запуске приложения распознается только мой web.config

Я не хочу помещать конфигурацию этого пользовательского файла конфигурации в мой файл web.config, потому что эта конфигурация является ответственной за уровень инфраструктуры.

Как я могу использовать эту пользовательскую конфигурацию из другого проекта в моем веб-проекте?

ОК - так что это внутренняя конфигурация приложения, но не совсем "инфраструктура". Это действительно звучит для меня как материал, который принадлежит web.config. Я обычно создаю пользовательский раздел конфигурации для подобных вещей, так что вы не получите все виды сумасшедших ключей appSettings. Harper Shelby
Конечно. В решении Visual Studio файл web.config (или app.config) находится в проекте пользовательского интерфейса. Из-за существующего процесса сборки VS, это то, что вы, вероятно, не измените. Однако файл конфигурации предназначен для приложения, а не для какого-либо конкретного логического уровня приложения. Вы можете настроить процесс сборки таким образом, чтобы конкретная информация о конфигурации сохранялась в отдельном файле, на который можно ссылаться из окончательного файла web.config, не являясь его частью, или (в 2010 году) можно создавать преобразования web.config, которые используются при сборке. процесс использует для настройки конфигов. Это просто детали Harper Shelby
web.config - это файл конфигурации - он доступенвсе слои. Тот факт, что он находится в проекте «UI», является деталью реализации, а не декларацией того, что это такое. Harper Shelby
Какая конфигурация инфраструктуры у вас есть, о которой веб-приложение не должно знать? Harper Shelby
@Harper - настройки пути к файлам, которые пользователь будет сохранять в приложении; Acaz Souza

Ваш Ответ

3   ответа
-1

что инфраструктурный проект является библиотекой классов, рассматривали ли вы создание свойств, чтобы выставить настройки app.config (?) Переднему лицу?

Вот пример того, что я имею в виду. Имейте в виду, что это всего лишь пример. Это свойство, которое демонстрирует, как выставить значение конфигурации через свойство. В вашем случае свойство будет извлекать значение из вашего пользовательского файла конфигурации.

public string GetConfigurationValue(string Key)
{
    return GetValueFromConfiguration(Key);
}

Мне интересно, почему вы создаете пользовательский файл конфигурации, а не просто создаете раздел конфигурации, который вы можете интегрировать в файл app.config. Кажется, ты делаешь вещи намного сложнее, чем нужно.

@ Джон Сондерс: прочитайте предыдущий комментарий. James Johnson
Нет, я имею в виду создание общедоступных свойств, которые извлекают значения из вашего файла конфигурации, поэтому веб-приложение, использующее библиотеку, может использовать свойства для доступа к значениям конфигурации. James Johnson
-1: почему ваш пример используетWebConfigurationManager? Это будет ограничивать вызов кода из ASP.NET. John Saunders
это не app.config, это пользовательский конфиг. да, для создания пользовательской конфигурации мне нужно создать класс, производный от ConfigurationSection. Вы имеете в виду получить значения непосредственно из класса вместо того, чтобы получить значения из файла конфигурации? Acaz Souza
Я очень четко заявил, что это был пример, и что он будет отличаться для его реализации. Он должен был продемонстрировать концепцию предоставления значений конфигурации через свойство. Честно удивлен, что вы бы понизили это. Я чувствую, что вы не читали мой ответ. James Johnson
3

е.

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

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

У вас есть источник, где, скажем, .NET предназначен для единого процесса настройки для каждогоAppDomain? Acaz Souza
Посмотрите на мою ситуацию, мне нужно пользовательский файл конфигурации, чтобы указать пути, где будут сохраняться файлы. Вы уверены, что Web.config живет в UI Layer? Acaz Souza
Если ваша библиотека классов вызывается с веб-страницы, то да, она должна быть в web.config. Это не вопрос слоев. Это не имеет ничего общего со слоями. Это связано с тем, какой файл необходимо изменить, чтобы изменить конфигурацию. .NET производит настройкумного проще, требуя один файл наприменение, а не один файл для каждого компонента, как для файлов .ini или реестра. John Saunders
Видетьmsdn.microsoft.com/en-us/library/ms229689.aspx: «Имя и местоположение файла конфигурации приложения зависят от хоста приложения, который может быть одним из следующих» John Saunders
0

var exeMap = new ExeConfigurationFileMap {ExeConfigFilename = @"C:\Path\To\Your\File"};
Configuration myConfig = ConfigurationManager.OpenMappedExeConfiguration(
    exeMap, ConfigurationUserLevel.None
);
Конечно, вы можете использовать<appSettings file="foo.config"> метод, но тогда вы можете использовать только относительный путь к другому файлу. Это обычно используется для организации настроек приложения и строк конфигурации. kprobst
Существовать другим, более простым способом? Acaz Souza
Я знаю этот подход, но я тоже не хочу их использовать. Я часто вижу пользовательские файлы конфигурации других библиотек, таких как log4net, я не знаю, как они их используют. Acaz Souza
nHibernate также использует такую настройку, но они написали свою собственную инфраструктуру конфигурации. kprobst

Похожие вопросы