C#: 从外部程序获取数据

3

我有三个项目:UICoreHost,分别是Windows窗体应用程序、类库和Windows窗体应用程序。

UI是我的启动项目,但启动外部程序的设置是Host.exe

UI引用了我的数据访问层Core项目。

Host加载配置文件。

基本上,当我运行这个应用程序时,执行的第一件事就是Host项目中的Main函数。

现在,在Main函数中,我想从数据库获取数据,但Host没有引用Core

我的Main函数如何获取数据库中的数据?

目前,我能想到的是在Main函数中执行一些操作(批处理文件或者tt文件)并将结果写入文件。然后再从文件中读取数据。你能否推荐其他的方法?


最简单的方法肯定是从主机中添加对核心的引用? - James Barrass
进一步解释@JamesBarrass的评论,为什么需要Host项目?为什么不在UI项目中直接使用Main函数? - Bas Bossink
我将尽力解释。这三个项目是解决方案的一部分,其中包含许多其他项目。基本上,主机只包含主要表单和空控件。所有模块都在UI项目中,例如客户管理模块。主机所做的就是配置主要表单,以便当您进入客户管理模块时,所有按钮、标签等都被放入我提到的空控件中。基本上,主机在那里配置主要表单作为模板。否则,我无法从主机添加对Core的引用。 - jmc
1个回答

0
如果主机有对UI的引用,您可以在UI中创建一个公共类/方法,主机将能够使用。
如果UI具有对主机的引用,并且主机没有对UI的引用,您仍然可以通过使用接口来做到这一点。例如,您可以添加另一个名为“Interfaces”的项目,在其中创建一个名为“IProvideDBAccess”的接口,主机将引用该程序集。
UI将包含一个公共类,该类将实现接口“IProvideDBAccess”,并且主机将能够在运行时使用实现该接口的任何对象,即使没有对UI的强引用。
当然,还有许多其他方法可以完成您想要做的事情,而无需保存文本文件并再次解析它们 ;-)
此外,您可以在这里查看一些项目或解决方案分层的想法,只是一些想法,我知道这不完全符合您在特定情况下寻找的内容:https://dev59.com/gms05IYBdhLWcg3wD9wB#7474357

1
嗨,Davide,我已经实现了你在第2和第3段中提到的内容。你能否给我展示一些代码,告诉我如何在我的主机项目上使用实现了“IProvideDBAccess”的公共类? - jmc
@wintersolstice 请与我们分享 Host 项目在其 Main 方法中如何加载 UI 项目,请编辑您的问题以向我们展示一些代码。谢谢。 - Davide Piras
好的,我一会儿会编辑。关于你回答的第三段,假设我创建的公共类名为“ApplicationClass”。在我的主函数中,我可以说IProvideDBAccess access = new ApplicationClass();吗?我很困惑我如何能够使用它,因为Host没有对UI和ApplicationClass的引用:IProvideDBAccess是在UI上实现的。 - jmc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接