我想创建一个引用的窗体 - 让我们说 - crud.dll。
然后我希望crud.dll作为外部DLL。
这个想法是,crud.dll(连接到数据库)将有许多版本(例如,Sybase版本,SQLite版本,不同版本的不同数据库详细信息)。
对于我的情况,crud.dll是using Sybase.Data.AseClient;
当我构建时,我得到错误,因为Sybase.AdoNet2.AseClient.dll也依赖于另一个dll。如何以正确的方式做事?
谢谢你的时间。
答案 0 :(得分:1)
您需要从应用程序逻辑中抽象出数据库访问代码。您可以将Repository pattern与Dependency Injection结合使用,将数据库操作与应用程序逻辑隔离开来。
答案 1 :(得分:0)
您需要为每个 DLL编译单独的Windows窗体应用程序,因为应用程序将静态链接引用的DLL。显然不是一个理想的方法。另一种方法是使用动态加载(LoadLibrary,GetProcAddress),但这很容易出错,找到正确 crud.dll的难度会导致{{3} }。
更好的替代方法是静态键入应用程序中所有受支持的提供程序(例如,典型的存储库模式实现将属于此类别),这样可以消除所有这些问题,但是在应用程序编译时,受支持的提供程序集将被硬连接时间。
现代的替代方案是通过COM公开crud.dll提供的服务,并让应用程序配置所需的COM类(由其中一个提供程序实现支持)。
最终动态加载提供商*并且没有在构建时静态修复的受支持提供商列表是硬。我会认真重新审视这些要求,并考虑是否在编译时修复一组众所周知的受支持提供程序,并使用许多静态链接方法之一(例如存储库模式)。