Стратегия создания библиотеки C# для сторонней интеграции с несколькими версиями wsdl

Нам нужно интегрировать сторонние SOAP API в нашу систему. Поскольку мы являемся поставщиком решений SaaS, нам необходимо поддерживать все версии третьих сторон. У нас есть конфигурация, что Клиент А имеет версию 1.8, Клиент Б имеет версию 2.0. (Версия может занять месяцы для новой версии.)

Что я ищу, так это общая стратегия создания библиотеки, которая может работать со всеми версиями.

В качестве решения я думаю создать несколько версий пространства имен в одной библиотеке C#.

  1. TP1.DLL
    • Пространство имен - TP1_v1.8
      • Entity1 (прокси-класс)
      • Entity2 (прокси-класс)
    • Пространство имен - TP2_v2.0
      • Entity1 (прокси-класс)
      • Entity2 (прокси-класс)

Я хочу класс-обертку для всей сущности независимо от версии. поэтому я назову этот класс-обертку, и он инициализирует объект требуемой версией.

Как я могу это сделать? Это правильный способ справиться с такой ситуацией?

Если потребуется дополнительная информация, дайте мне знать!

Спасибо!

Анкур Калавадия

1 ответ

Решение

Вы можете использовать следующее решение для вашей проблемы, которое поможет вам в вашей реализации.

-> Сначала вы создаете общий интерфейс, который может быть полезен для общего идентификатора всех одинаковых типов.

-> Сделать отдельное пространство имен по имени версии

 DefaultNameSpace : ABC.XYZ
 Version          : 1.6.2

Then make the namespace patterns as

e.g. ABC.XYZ.V162  (Replcing . and set prefix as per classname norms (always start with Alphabet ) )

Create Class under above namespace with implementing interface

-> Создать одно и то же имя класса для всех версий (например, class1, class2, распространенный в версии v1, v2 с различной реализацией)

-> Создать ниже общую функцию для генерации соответствующего объекта

    public static iTestInterface GetEntity(string className)
    {
        string versionPrefix = "v_";
        string strVersion =  1.6.2; 

        string dllPath =System.Web.HttpRuntime.BinDirectory; 
        string dllName = "dllName.dll";
        string Version = versionPrefix +  

        string strclassNameWithFullPath = dllPath + Version.Replace(".", "") + "." + className; 
        try
        {
            string strAssemblyWithPath = string.Concat(dllPath, dllName);

            if (!System.IO.File.Exists(strAssemblyWithPath))
            {
                return null;
            }

            System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFile(strAssemblyWithPath);
            Type t = assembly.GetType(strclassNameWithFullPath);

            object obj = Activator.CreateInstance(t);
            return (iTestInterface)obj;
        }
        catch (Exception exc)
        {
            //string errStr = string.Format("Error occured while late assembly binding. dllPath = {0}, dllName = {1}, className = {2}.", dllPath, dllName, className);
            return null;
        }
    }

-> функция вызова, как показано ниже

 iTestInterface obj = GetEntity(classnameString);

-> вызовите подходящие методы объекта. Вызов выше будет общим для всех соответствующих классов.

Спасибо и С наилучшими пожеланиями Шайлеш Чопра

Другие вопросы по тегам