我已经定义了一些设置,并计划在我的VS 2008 C#WPF项目中定义更多。我知道可以在设计时通过设置设计器在项目中指定设置。我也知道可以在运行时检索和设置设置。我想做的是能够从其他程序集和项目中访问设置。
我不明白如何在不写新课的情况下做到这一点。由于设置类是在我的根命名空间中定义的,因此我无法在不创建循环引用的情况下直接从其他程序集访问设置(如果您尝试添加对已引用该项目的项目的引用,则会发生这种情况)。有没有办法传递属性而不必创建具有完全相同属性定义的重复类?
答案 0 :(得分:1)
我知道您正试图从您未在项目中引用的程序集中读取属性。在这种情况下,reflection就是答案。
在dll
所在的任何地方,都可以阅读该程序集中的信息。加载Settings
类,获取Default
设置,然后访问所需的参数。
例如,我有一个名为se2.dll
的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);