Вы можете сгруппировать все ваши настройки в свой собственный раздел конфигурации.Затем, конечно, вы можете переместить все это вместе в другой файл, используя атрибут configSource
, который вы упомянули выше.
В случае AppSettings ваш пользовательский раздел конфигурации может объединить свои собственные значения с обычными AppSettings (NameValueCollection
) с использованием функции Add .Таким образом, вам вообще не нужно менять ваш клиентский код.
В качестве примера, вот мой базовый класс, который я использую, чтобы добавить атрибут "externalConfigSource" к большинству моих пользовательских элементов, чтобы разрешить дальнейший файлрасщепление для некоторых из моих подэлементов (хотя это, возможно, то, что вы пытаетесь избежать):
public class BaseConfigurationElement : ConfigurationElement
{
protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey)
{
var fileSource = reader.GetAttribute("externalConfigSource");
if (!String.IsNullOrEmpty(fileSource))
{
var file = new FileInfo(Path.Combine(AppDomainExtensions.ConfigurationFilePath(), fileSource));
if (file.Exists)
{
using (var fileReader = file.OpenRead())
{
var settings = new XmlReaderSettings(){ CloseInput = true, IgnoreProcessingInstructions = true, IgnoreWhitespace = true, IgnoreComments = true};
using (var fileXmlReader = XmlReader.Create(fileReader, settings))
{
var atStart = fileXmlReader.IsStartElement();
base.DeserializeElement(fileXmlReader, serializeCollectionKey);
}
}
reader.Skip();
}
else
{
throw new ConfigurationErrorsException("The file specified in the externalConfigSource attribute cannot be found", reader);
}
}
else
{
base.DeserializeElement(reader, serializeCollectionKey);
}
}
protected override bool OnDeserializeUnrecognizedAttribute(string name, string value)
{
if (name == "externalConfigSource")
{
return true; // Indicate that we do know it...
}
return base.OnDeserializeUnrecognizedAttribute(name, value);
}
}
public static class AppDomainExtensions
{
public static string ConfigurationFilePath()
{
return ConfigurationFilePath(AppDomain.CurrentDomain);
}
// /595904/kak-naiti-put-k-aktivnomu-failu-app-config
public static string ConfigurationFilePath(this AppDomain appDomain)
{
return Path.GetDirectoryName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
}
}