Я ищу написать унифицированный класс конфигурации, который объединяет настройки в нескольких приложениях, которые существуют из Архитектуры настроек приложений (ASA) Visual Studio.(http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx)
ASA генерирует класс Settings.Designer.cs для каждого проекта. Я хотел бы объединить все классы настроек нескольких проектов, чтобы они были доступны из одного класса. Например, у меня естьпроект, который используется только для хранения общих настроек, и все. Этот проект имеет класс вроде:
public static class ConfigManager
{
public static TopNamespace.Configuration.Properties.Settings Shared
{
get { return TopNamespace.Configuration.Properties.Settings.Default; }
}
}
Это позволяет мне получить доступ к конфигурации, например:
ConfigManager.Shared.ConfigKey
Что бы ямне нравится расширять этот класс ConfigManager, чтобы дать мне доступ к сгенерированным классам настроек других проектов. Я не уверен, возможно ли это или как это сделать. Например, я хотел бы иметь возможность сделать:
ConfigManager.ApplicationName.ConfigKey
ConfigManager.OtherApplicationName.ConfigKey
Циркулярные ссылки не позволяют мне добавлять ссылки на проекты приложений из проекта конфигурации, чтобы получить доступ к типам, чтобы сделать больше членов, таких как:
public static class ConfigManager
{
public static TopNamespace.Configuration.Properties.Settings ApplicationName
{
get { return TopNamespace.ApplicationName.Properties.Settings.Default; }
}
public static TopNamespace.Configuration.Properties.Settings OtherApplicationName
{
get { return TopNamespace.OtherApplicationName.Properties.Settings.Default; }
}
}
И затем пытаться добавитьссылка на проект конфигурации обратно из проектов приложения, чтобы получить доступ к классу ConfigManager.
Я думал орасширение классов, но частичные классы не будут работать между сборками, и вы не можете наследовать от статических классов.Использование дженериков не похоже на то, что это было бы очень хорошим решением, поскольку у вас не могло бы быть хорошего чистого типа подписей ConfigManager.ApplicationName.SettingName для членов свойства.
Есть ли способ использовать наследование или провести динамический анализ доступных типов в Домене приложений и загрузить типы настроек для доступных приложений, которые будут доступны из одного класса ConfigManager?Предоставление доступа ко всем классам настроек для нескольких проектов, сгенерированных Visual Studio, из одного класса менеджера со свойствами для каждого экземпляра настроек проекта.