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

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

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

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

  1. TP1.DLL
    • Namespace - TP1_v1.8
      • Entity1 (Proxy class)
      • Entity2 (прокси-класс)
    • Namespace - TP2_v2.0
      • Entity1 (Proxy class)
      • Entity2 (прокси-класс)

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

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

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

Спасибо!

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


person adkalavadia    schedule 20.10.2015    source источник


Ответы (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);

--> вызывать соответствующие методы объекта. Приведенный выше вызов будет общим для всех соответствующих классов.

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

person shailesh chopra    schedule 28.10.2015