关于C#:如何将属性传递给另一个命名空间中的方法

How to pass properties to a method in another namespace

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

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


我理解您试图从项目中未引用的程序集读取属性。在这种情况下,反思就是答案。

从该程序集中读取信息,无论dll在哪里。加载Settings类,获取Default设置,并访问所需的参数。

例如,我有一个名为se2.dll的dll,其中一个参数我通常访问为:

1
string parameterValue = se2.Settings2.Default.MyParameter;

现在,从另一个项目中,我必须使用这样的反射:

1
2
3
4
5
6
7
8
9
// 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);