首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同的DLL版本,一个代码库

不同的DLL版本,一个代码库
EN

Stack Overflow用户
提问于 2019-11-18 16:02:58
回答 1查看 71关注 0票数 1

在我的项目中,我必须与一个ERP系统交互,该系统公开了大约30个不同的API DLL。ERP公司系统地创建了他们系统的新版本,我被迫将DLL更改为新版本。然而,并不是我所有的客户都更新了ERP,所以我也不得不维护旧的参考资料。我目前对这个问题的解决方案是:

1)对于每个ERP版本,我创建了一个'ApiWrapper‘项目,引用了该ERP版本的DLL。

2)在我的主项目中,我引用了这些'ApiWrappers‘,并选择了其中的一个。

'ApiWrapper‘中的一个示例函数如下所示:

代码语言:javascript
运行
复制
public void AddContractorAttribute(Ustawienia settings, string attributeCode, string attributeValue, int contractorId)
    {
        CreateNewSession();

        CDNHeal.Kontrahenci AllContractors = (CDNHeal.Kontrahenci)session.CreateObject("CDN.Kontrahenci", null);
        CDNHeal.IKontrahent SelectedContractor = (CDNHeal.IKontrahent)AllContractors[$"Knt_KntId = {contractorId}"];
        CDNBase.ICollection AllAttributes = (CDNBase.ICollection)(session.CreateObject("CDN.DefAtrybuty", null));
        CDNTwrb1.IDefAtrybut SelectedAttribute = (CDNTwrb1.IDefAtrybut)AllAttributes[$"dea_Kod = '{attributeCode}'"];
        CDNTwrb1.IKntAtrybut NewAttributeValue = (CDNTwrb1.IKntAtrybut)SelectedContractor.Atrybuty.AddNew(null);

        NewAttributeValue.DefAtrybut = (CDNTwrb1.DefAtrybut)SelectedAttribute;
        NewAttributeValue.Wartosc = attributeValue;

        session.Save();
    }

现在,我遇到的问题是:如果我想在ApiWrapper中添加或更改一个函数,我必须在每个函数中执行。它们在代码方面没有区别,只是引用了一组不同的DLL。有没有办法通过类继承或其他方式来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-11-18 16:31:53

您可以设计一个将使用构建器模式或工厂方法实现的类(使用一些创造性的模式,请阅读这些模式,它将帮助您减少代码库)。方法是设计一个泛型类,它将在任何地方使用。因此,您可以轻松地对其进行修改。你需要弄清楚如何区分你的dll。Dll的引用可以通过两种方式加以区分:

  1. 使用程序集的全名(通常包括程序集的版本)。
  2. 或者您可以将所有dll加载到内存中并反射地读取dll的版本。

在区分版本之后,您可以轻松地将所有dll放在一起并发布它。因此,基本上您应该设计一个通用构建器,它将接受一个版本号作为参数,并返回一个准备充分的dll工作台。希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58910205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档