【问题标题】:Passing Class Reference over Interface通过接口传递类引用
【发布时间】:2014-02-07 21:48:39
【问题描述】:

很抱歉编辑,但我觉得我的问题不够具体。

我有一个主机应用程序、一个 Interface.dll 和一个 Plugin.dll。在我的主机应用程序中,我在全球范围内使用一个类的实例。

但是:我的 Plugin.dll(它从 Interface.dll 中实现我的 iInterface)需要在主机应用程序中访问我的类的特定实例。

通过在接口中使用我的函数名称,我可以从主机应用程序访问插件中的这些函数,但是如何从插件访问全局类实例?

我不会写

Public Interface IPlugin

    Sub SetInstance(ByRef MyClassInstance As MyClass)

End Interface

但这正是我想要做的......

非常感谢您的帮助。

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 您希望接口的实现充当MyClass 实例的容器吗? CreateInstance() 是否与您要传递的实例有关?否则不能让MyClass实现IInterface吗?
  • 插件对MyClass不感兴趣,它只是想要一个接口类型的引用。它也不知道关于 MyClass 的任何事情,这是一种存在于插件不知道的不同程序集中的类型。所以你的“ClassInstance”字段需要是 IInterface 类型。
  • @Hans:嗯.. 听起来 MyClass 必须实现 iInterface 而不是 iInterface 必须实现 MyClass?
  • @Mapper:我不明白这一点。如果 MyClass 实现了 iPlugin 接口,那么我会得到很多不应该属于 MyClass 的成员。是的,ClassInstance 只是一个例子。不用管它。

标签: vb.net class interface


【解决方案1】:

没有办法在接口内从宿主应用程序实现类。唯一的方法是作为对象引用,这会导致很多其他问题。

解决方案是将通用类导出到自己的库 (.dll) 中,并将该库实例化到主机应用程序和插件以及界面中。

现在可以毫无问题地传递引用,就好像所有不同的代码部分都在同一个命名空间中一样。

谢谢你们的帮助。

【讨论】:

    猜你喜欢
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2014-05-05
    • 2017-11-29
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多