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

问题描述 投票:1回答:1

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

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

2)在我的主要项目中,我引用了那些“ ApiWrappers”并使用了其中的一个。

'ApiWrapper'内部的示例函数如下:

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。是否可以通过类继承或其他方式解决此问题?

c# inheritance dll
1个回答
0
投票

您可以设计一个将通过builder模式或factory方法实现的类(使用一些创建模式,请阅读有关这些模式的信息,这将有助于您减少代码库)。方法是设计一个将在所有地方使用的通用类。因此,您可以轻松地对其进行修改。您需要弄清楚如何区分您的dll。 DLL的参考可以通过两种方式进行区分:

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

区分版本后,您可以轻松地将所有dll放在一起并寄出。因此,基本上,您应该设计一个通用的生成器,该生成器将以版本号作为参数并返回准备充分的dll平台。希望对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.