- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 MainForm 类,我有一个函数来检索存储在我的数据库中的设置。
到现在为止还挺好。
然后,我有一个在启动时加载的插件 (DLL),但我想使用相同的函数来检索我的 DLL 中的设置。
如果我需要访问我的 DLL 中的函数,我只需输入 myDLL.function(....)
,但我不能使用 MainForm.function
来自我的 DLL,因为我的 DLL 不知道 MainForm。
那么如何在我的主应用程序和我的 dll 之间传递我的设置呢?
最佳答案
只是为了让您知道术语,您正在寻找“Inversion of Control”或“IoC”。
有多种实现方式,包括 Dependency Injection和 Nico 的回答中的回调(例如委托(delegate))。还有服务定位器(尽管许多人认为这是一种“反模式”)和工厂。
就个人而言,我更喜欢依赖注入(inject)方法:
基本上,您的 DLL(又名“class library”)需要一个可以执行功能的对象,但它需要其他人(调用者)来实现实际逻辑。
因此,您需要做的就是在您的 DLL 中创建一个接口(interface),该接口(interface)定义您需要的对象类型:
Namespace DLL
Public Interface IDataRetriever
Public Function GetData() As Object
End Interface
End Namespace
Public Class DataRetriever
Implements DLL.IDataRetriever
Public Function GetData() As Object Implements DLL.IDataRetriever.GetData
//...
Return New Object()
End Function
End Class
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
关于.net - 如何从我的 DLL 访问 MainForm 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096280/
如何显示需要同步运行的表单。我尝试从线程池的 queueworker 运行 application.run - 但有时我有一些无效的句柄。尝试使用常规线程,但是当主窗体关闭时它不会关闭它 - 我真的不
本次将要很大家分享的是一个跨平台运行的服务插件 - TaskCore.MainForm,此框架是使用.netcore来写的,现在netcore已经支持很多系统平台运行了,所以将以前的Task.Mai
我的应用程序有多种形式,还有一种更重要的形式,即主要形式,其行为通常可以,但是在相同情况下(例如,当我从子表单中打开文件对话框时),行为是:子表单被隐藏并显示主窗体。 如何避免这种情况? 最佳答案 确
连接到数据库后是否可以从“可用”表单列表中选择一个表单(作为主表单)?我有一个带有 3 个“可用”表单的数据模块。暂时没有主表单。首先创建数据模块。现在,我想根据用户登录的数据库选择表单,并将其设为主
这是 *.dpr : program Project1; uses Vcl.Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas
我有这个 MainForm 类: namespace homework_001{ public partial class MainForm : Form { public MainForm(
这个问题在这里已经有了答案: How do I prevent the app from terminating when I close the startup form? (4 个答案) 关闭
我有以下类(class): public class CreateNewWeapon : BaseWeapon { string[] weaponNames = { "Dragonsl
在我们现有的代码中,我们有很多这样的代码,其中以 MainForm 作为所有者(例如,而不是 nil)创建表单,但我们显式地释放它。 function SomeFunc(): Boolean; var
如何从后台任务向主窗体发送消息 (TOmniMessage)? 我想向 Mainform 发送以下消息: Memo1.Lines.Add(Format('BEGIN: %s', [msg.MsgDat
我想在我的 Mainform 上制作面板的屏幕截图。这个屏幕截图应该是在用户在子表单上选择了一些选项之后制作的。一开始一切顺利,但现在屏幕截图包含部分子表单。 子表单像这样打开: private vo
我正在使用 Borland c++ builder。我有一个应用程序,我希望隐藏主表单,直到在不同的表单上按下按钮。我已经将主窗体上的 Visible 值设置为 false,但是当我运行程序时它仍然显
当我将 TRibbon 控件放置在不是应用程序 MainForm 的窗体上时,TRibbon 的操作(即剪切、粘贴)将始终在执行操作后将焦点返回到 MainForm。 即使保存 TRibbon 的 T
我有一个导出 DLL 并具有 library header 的 Delphi 2010 应用程序。它在 TThread 中创建其 MainForm,如下所示: var ActiveThread:
我对编程还很陌生,并且已经开始了一个项目,我试图将程序的功能分成类,每个类处理与程序的特定部分相关的大部分内容。 我有一个名为 DirectoryMonitors 的类,它创建一个对象来监视带有 Fi
我有一个 MainForm 类,我有一个函数来检索存储在我的数据库中的设置。 到现在为止还挺好。 然后,我有一个在启动时加载的插件 (DLL),但我想使用相同的函数来检索我的 DLL 中的设置。 如果
我可以在不引用构造函数中的对象的情况下执行此操作吗?也就是说,任何继承自FrmTaoChild的类在创建时都必须在主窗口的工具栏上添加按钮 public class FrmTaoMain extend
我正在尝试在 MainForm 的 datagridview 中显示数据。我正在创建客户表单中添加客户。 private void createButton_Click(object sender,
我的应用程序使用 Message.hpp 中的 SendStructMessage() 函数通过传入消息填充一些面板。 SendStructMessage() 需要一个有效的窗口句柄才能发送到。 我已
我有两个类(class)。 Public Class MainForm Private Project As clsProject Private Sub btnDo_Click ..
我是一名优秀的程序员,十分优秀!