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

本文关键字:命名空间 另一个 方法 属性 | 更新日期: 2023-09-27 18:07:30

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

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

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

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

从该程序集读取信息,无论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);