C#类型可用性-跨应用程序使用应用程序设置体系结构-强类型配置

C#类型可用性-跨应用程序使用应用程序设置体系结构-强类型配置,c#,.net,visual-studio,settings,application-settings,C#,.net,Visual Studio,Settings,Application Settings,我希望编写一个统一的配置类来聚合VisualStudio的应用程序设置体系结构(ASA)中存在的多个应用程序中的设置。(http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx) ASA为每个项目生成一个Settings.Designer.cs类。我想做的是将几个项目的所有设置类聚合在一起,以便从一个类中可用。例如,我有一个仅用于存储共享设置的项目,仅此而已。此项目有一个类,如: public static class ConfigManager

我希望编写一个统一的配置类来聚合VisualStudio的应用程序设置体系结构(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; }
 }
}
public class ConfigManager : ExternalProjectNamespace.ConfigManager
这允许我访问以下配置:

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类加载可用应用程序的设置类型?使VisualStudio生成的多个项目中的所有设置类都可以从一个管理器类中使用,并具有每个项目设置实例的属性

我最终决定设置它的方法是使用一个“静态”类,但实际上并不是这样定义的,因为.Net不允许您继承静态类型。但是,您可以编写包含所有静态成员的类,并使用受保护的构造函数,这使得它在所有意图和目的下都是静态的。然后可以从外部项目类继承,如:

public static class ConfigManager
{
 public static TopNamespace.Configuration.Properties.Settings Shared
 {
  get { return TopNamespace.Configuration.Properties.Settings.Default; }
 }
}
public class ConfigManager : ExternalProjectNamespace.ConfigManager

使用这个约定,我能够获得我想要的语法,而不必在使用ConfigManager的每个项目中重复代码

我最终决定设置它的方法是使用一个“静态”类,但实际上并不是这样定义的,因为.Net不允许您继承静态类型。但是,您可以编写包含所有静态成员的类,并使用受保护的构造函数,这使得它在所有意图和目的下都是静态的。然后可以从外部项目类继承,如:

public static class ConfigManager
{
 public static TopNamespace.Configuration.Properties.Settings Shared
 {
  get { return TopNamespace.Configuration.Properties.Settings.Default; }
 }
}
public class ConfigManager : ExternalProjectNamespace.ConfigManager
使用这个约定,我能够获得我想要的语法,而不必在使用ConfigManager的每个项目中重复代码