1

我想创建一个引用 - 比如说 - crud.dll 的 Windows 窗体。然后我希望 crud.dll 作为外部 dll。这个想法是,crud.dll(连接到数据库)将有许多版本(例如,Sybase 版本、SQLite 版本、不同版本的不同数据库详细信息)。就我而言, crud.dll 是using Sybase.Data.AseClient; 当我构建时,我收到错误,因为 Sybase.AdoNet2.AseClient.dll 也依赖于另一个 dll。如何以正确的方式做事?感谢您的时间。

4

2 回答 2

1

您需要从应用程序逻辑中抽象出数据库访问代码。您可以将存储库模式依赖注入结合使用,以将您的数据库操作与应用程序逻辑隔离开来。

于 2013-01-28T07:37:44.960 回答
0

您需要为每个DLL 编译单独的 Windows 窗体应用程序,因为该应用程序将静态链接引用的 DLL。显然不是一个理想的方法。另一种方法是使用动态加载(LoadLibraryGetProcAddress),但这很容易出错,并且很难找到正确的crud.dll 导致DLL-Hell

一个更好的选择是静态类型化应用程序中所有支持的提供者(例如,典型的存储库模式实现将属于这一类),这消除了所有这些问题,但支持的提供者集将在应用程序编译时硬连线。

现代替代方案是通过 COM 公开 crud.dll 提供的服务,并让应用程序配置所需的 COM 类(由提供者实现之一提供支持)。

最终加载一个提供者 * 动态 * 并且没有在构建时静态固定支持的提供者列表是困难的。我会认真重新审视这些要求,并考虑是否在编译时修复一组众所周知的受支持的提供程序,并使用许多可用的静态链接方法之一(例如存储库模式)。

于 2013-01-28T07:43:53.933 回答