【发布时间】:2010-12-03 21:04:27
【问题描述】:
我希望编写一个统一的配置类,用于聚合 Visual Studio 的应用程序设置架构 (ASA) 中存在的多个应用程序中的设置。 (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 生成的多个项目中的所有设置类可从一个具有每个项目设置实例的属性的管理器类中使用。
【问题讨论】:
标签: c# .net visual-studio settings application-settings