加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 如何从我的DLL访问我的MainForm中的函数

发布时间:2020-12-14 04:38:01 所属栏目:Windows 来源:网络整理
导读:我有一个MainForm类,我有一个函数来检索存储在我的数据库中的设置. 到现在为止还挺好. 然后,我有一个启动时加载的插件(DLL),但我想使用相同的函数来检索我的DLL中的设置. 如果我需要访问我的DLL中的函数,我只需要输入myDLL.function(….),但我不能使用我的DL
我有一个MainForm类,我有一个函数来检索存储在我的数据库中的设置.

到现在为止还挺好.

然后,我有一个启动时加载的插件(DLL),但我想使用相同的函数来检索我的DLL中的设置.

如果我需要访问我的DLL中的函数,我只需要输入myDLL.function(….),但我不能使用我的DLL中的MainForm.function,因为我的DLL不知道MainForm.

那么如何在主应用程序和我的dll之间传递设置?

解决方法

只是你知道术语,你正在寻找“ Inversion of Control”或“IoC”.

有多种方法可以实现这一点,包括Dependency Injection和回调(例如代表),如Nico的答案.服务定位器(虽然许多人认为这是一个“反模式”)和工厂.

就个人而言,我更喜欢依赖注入方法:

基本上,你的DLL(a.k.a.“class library”)需要一个可以执行一个函数的对象,但它需要其他人(调用者)来实现实际的逻辑.

因此,您需要做的就是在DLL中创建一个接口,用于定义所需的对象类型:

Namespace DLL

    Public Interface IDataRetriever

        Public Function GetData() As Object

    End Interface

End Namespace

然后在引用您的DLL的MainForm项目中,只需创建一个实现此接口的类:

Public Class DataRetriever
    Implements DLL.IDataRetriever

    Public Function GetData() As Object Implements DLL.IDataRetriever.GetData
        //...
        Return New Object()
    End Function

End Class

(请注意,任何类都可以实现接口,包括已经存在的类,甚至是MainForm本身.您不需要为接口创建新类 – 但请确保您遵循separation of concerns.)

现在,当您调用DLL时,您可以将其传递给DataRetriever,您的DLL将知道它正在处理什么.

Namespace DLL

    Public Class Utility

        Public Shared Function DLLFunction( retriever as IDataRetriever )
            retriever.GetData()
        End Function

    End Class

End Namespace
Class MainForm

    Sub Example()

        DLL.Utility.DLLFunction( New DataRetriever() )

    End Sub

End Class

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读