Стратегия создания библиотеки C# для сторонней интеграции с несколькими версиями wsdl
Нам нужно интегрировать сторонние SOAP API в нашу систему. Поскольку мы являемся поставщиком решений SaaS, нам необходимо поддерживать все версии третьих сторон. У нас есть конфигурация, что Клиент А имеет версию 1.8, Клиент Б имеет версию 2.0. (Версия может занять месяцы для новой версии.)
Что я ищу, так это общая стратегия создания библиотеки, которая может работать со всеми версиями.
В качестве решения я думаю создать несколько версий пространства имен в одной библиотеке C#.
- TP1.DLL
- Пространство имен - TP1_v1.8
- Entity1 (прокси-класс)
- Entity2 (прокси-класс)
- Пространство имен - TP2_v2.0
- Entity1 (прокси-класс)
- Entity2 (прокси-класс)
- Пространство имен - TP1_v1.8
Я хочу класс-обертку для всей сущности независимо от версии. поэтому я назову этот класс-обертку, и он инициализирует объект требуемой версией.
Как я могу это сделать? Это правильный способ справиться с такой ситуацией?
Если потребуется дополнительная информация, дайте мне знать!
Спасибо!
Анкур Калавадия
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);
-> вызовите подходящие методы объекта. Вызов выше будет общим для всех соответствующих классов.
Спасибо и С наилучшими пожеланиями Шайлеш Чопра