2

我在工作中开发的软件有问题。在用户执行以下步骤后,我正在创建一个 dll 文件。

  1. 将某些参数和计算代码指定到 win 表单中。
  2. 指定 dll 的名称。

完成后,我将创建所有必要的代码文件(使用 codeDOM)并编译源文件以生成 dll。

现在,我的问题在于用户界面。我想在我的 UI 中的 dll 对象中显示参数,但我不知道用户要添加哪些参数。

我想要一个系统,我可以指定配置文件来耦合 UI 元素(我事先知道)和 dll 中的对象(我没有先验知识,除了我可以从使用反射中收集到的信息) .

因此,实际上,我想将 UI 元素(label.text 等)之间的耦合从我的代码中引入,可能是一个 xml 文件,我的 UI 应该使用这个 xml 文件来填充动态加载的对象中的数据dll。

请帮忙。

提前致谢。

4

2 回答 2

1

这是一个简短的代码片段,可帮助您入门:

Assembly asm = Assembly.LoadFrom("generated_asm.dll");
// or if the assembly is already loaded:
// asm = AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "Generated.Assembly");

var type = asm.GetType("InsertNamespaceHere.InsertTypeNameHere");

// creates a table layout which you can add to a form (preferable you use the designer to create this)
var tbl = new TableLayoutPanel { ColumnCount = 2 };

// enumerate the public properties of the type
foreach(var property in type.GetProperties())
{
  tbl.Add(new Label(property.Name));

  var input = new TextBox { Tag = property };
  input.TextChanged = this.HandleTextChanged;
  input.Enabled = property.CanWrite;

  tbl.Add(input);
}

在处理程序中你可以使用这个:

void HandleTextChanged(object source, ...) {
  var input = source as TextBox;
  var property = input.Tag as PropertyInfo;
  property.GetSetMethod().Invoke(this.instanceOfThatType, new object[] { Convert.ChangeType(input.Text, property.PropertyType) });
}

希望这可以帮助 :)

于 2012-11-22T01:36:48.087 回答
0

我想你可能想看看PrismMEF (Managed Extensibility Framework)。肯定支持您所描述的那种后期绑定。事实上,这是我们在工作中使用的技术堆栈,用于在程序集中进行后期绑定(或多或少类似于插件架构)。

于 2012-11-22T04:04:48.833 回答