如何将属性传递给另一个命名空间中的方法

时间:2013-04-04 01:09:49

标签: c# properties namespaces

我已经定义了一些设置,并计划在我的VS 2008 C#WPF项目中定义更多。我知道可以在设计时通过设置设计器在项目中指定设置。我也知道可以在运行时检索和设置设置。我想做的是能够从其他程序集和项目中访问设置。

我不明白如何在不写新课的情况下做到这一点。由于设置类是在我的根命名空间中定义的,因此我无法在不创建循环引用的情况下直接从其他程序集访问设置(如果您尝试添加对已引用该项目的项目的引用,则会发生这种情况)。有没有办法传递属性而不必创建具有完全相同属性定义的重复类?

1 个答案:

答案 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);