我已经定义了一些设置,并计划在我的 VS 2008 C# WPF 项目中定义更多。我知道可以在设计时通过设置设计器在项目中指定设置。我也知道可以在运行时检索和设置设置。我想做的是能够访问其他程序集和项目的设置。
如果不编写新课程,我不明白如何做到这一点。由于设置类是在我的根命名空间中定义的,因此我无法在不创建循环引用的情况下直接从其他程序集中访问设置(如果您尝试添加对已经引用该项目的项目的引用,则会发生这种情况)。有没有办法传递属性而不必创建具有完全相同属性定义的重复类?
我已经定义了一些设置,并计划在我的 VS 2008 C# WPF 项目中定义更多。我知道可以在设计时通过设置设计器在项目中指定设置。我也知道可以在运行时检索和设置设置。我想做的是能够访问其他程序集和项目的设置。
如果不编写新课程,我不明白如何做到这一点。由于设置类是在我的根命名空间中定义的,因此我无法在不创建循环引用的情况下直接从其他程序集中访问设置(如果您尝试添加对已经引用该项目的项目的引用,则会发生这种情况)。有没有办法传递属性而不必创建具有完全相同属性定义的重复类?
我了解您正在尝试从项目中未引用的程序集中读取属性。在这种情况下,反思就是答案。
读取该程序集的信息,无论它在哪里dll
。加载Settings
类、获取Default
设置并访问所需的参数。
例如,我有一个名为 的 dll se2.dll
,带有一个我通常会访问的参数:
string parameterValue = se2.Settings2.Default.MyParameter;
现在,从另一个项目中,我必须像这样使用反射:
// load assembly
System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom(@"M:\Programming\se2\se2\bin\Debug\se2.exe");
// load Settings2 class and default object
Type settingsType = ass.GetType("se2.Settings2");
System.Reflection.PropertyInfo defaultProperty = settingsType.GetProperty("Default");
object defaultObject = defaultProperty.GetValue(settingsType, null);
// invoke the MyParameter property from the default settings
System.Reflection.PropertyInfo parameterProperty = settingsType.GetProperty("MyParameter");
string parameterValue = (string)parameterProperty.GetValue(defaultObject, null);