Winform应用程序接口的参数类型不能赋值给参数类型

本文关键字:类型 参数 赋值 不能 应用程序接口 Winform | 更新日期: 2023-09-27 18:11:01

我有一个Winform应用程序,我想为客户实现某种接口,所以部分代码可以由客户稍后更改,如果他们需要的话。我相信我的方法是错误的,因为在重新编译我的Winform应用程序后,我在Visual Studio中得到一个错误。错误是"参数类型MyClass不能分配给参数类型MyClass",但我仍然能够重新编译它。我担心这将打破以后…

到现在为止我是这样实现的:

  • 在我的winform应用程序中,我创建了一个带有虚拟方法的抽象类。
  • 我正在为客户"发布"一个开源项目dll程序集,其中实现了这个抽象类,并且该方法正在调用抽象类中的基方法。如果客户想改变方法,他们只需自己实现。
  • 这个开源项目被引用并在我的winform应用程序中实现。

当客户想要更改方法时,他们实现该方法,重新编译dll并将新dll替换为我随程序集分发的dll。

我的winform应用程序有它自己的强名称,开源项目也有它自己的强名称。

然而,当我在引用开源项目后重新编译我的Winform应用程序时,我得到这个错误:"参数类型MyClass不能分配给参数类型MyClass"。我仍然可以重新编译这个项目。但我担心这个实现有一些严重的缺陷,以后会崩溃。特别是因为我已经实现了WyBuild,我将为Winform应用程序分发更新。

我需要为客户提供一种方法来更改应用程序中的一些方法,而无需访问所有源代码。如果我的执行是错误的,如何做到这一点,你有什么建议?

谢谢。

Winform应用程序接口的参数类型不能赋值给参数类型

我想说这种方法本身就是一种糟糕的方法。对我来说,这听起来很容易出错,你说你对它有不好的感觉。如果是这样,那么真的不要这样做。

当然有一些其他的解决方案是可以想象的,但鉴于你的描述,我可能会这样做,这将保持你的初衷。

看看微软的托管可扩展性框架(MEF),它可以在几个方面帮助你。

简单地说,它是这样工作的:

  • 你定义客户必须实现的interface
  • 客户端然后创建一个程序集,该程序集实现了该interface,并将其放置在MEF监视的位置
  • MEF自动加载程序集(无需重新发明轮子)

MEF让你可以控制它的工作方式。比如,它是否允许同时只加载或多个实现该接口的程序集,或者应该只在应用程序开始时查找插件,或者在应用程序的整个生命周期内监视插件的位置。

同样,通过这种方式,您可以摆脱您在这里组装的自定义解决方案,而是使用提供标准化方法的成熟框架。看看网上的教程就知道了,很容易上手。