Ссылка на класс, который может существовать в одной из двух сборок - PullRequest
2 голосов
/ 07 июля 2010

В настоящее время я работаю над сборщиком данных для проекта.То, как это работает, в основном вызывает другую программу, которая собирает данные, и эта программа возвращает структуру данных, содержащую набор информации об очереди.Затем комбайн сериализует данные.Программа, которая на самом деле собирает данные, обслуживается другой командой, и недавно они выполнили обновление и решили реструктурировать свой код.Метод, который я вызываю, все еще находится в том же месте, однако структура данных, которую я получаю, была перенесена в другую сборку (ее код остался прежним).Самое интересное в том, что у нас есть обе версии этого продукта прямо на месте, поэтому в зависимости от того, какая версия у клиента, нужная мне структура данных может находиться в одной из двух разных сборок.Мой босс хочет по возможности использовать только одну версию харвестерной программы.

Итак, мой вопрос таков: используя C # и .NET 3.5, есть ли способ выбрать, какую сборку использовать во время выполнения?Я думаю, что мог бы использовать отражения, но я хотел бы знать, могу ли я как-нибудь нормально написать код во время компиляции, а затем разрешить зависимость во время выполнения в зависимости от версии другой программы.

Ответы [ 3 ]

0 голосов
/ 07 июля 2010

Возможно, вы захотите изучить теги привязки сборки.

http://msdn.microsoft.com/en-us/library/twy1dw1e.aspx

0 голосов
/ 07 июля 2010

Вы можете попробовать использовать шаблон проектирования адаптера (оболочки).

interface IQueueInfoProvider
{
   DataStructure FetchData();
}

class Version1QueueInfoProvider : IQueInfoProvider
{
   DataStructure FetchData()
   {
      //Fetch using Version1 Assemblies.
   }
}

class Version2QueueInfoProvider : IQueInfoProvider
{
   DataStructure FetchData()
   {
       //Fetch using Version2 Assemblies.
   }
}

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

0 голосов
/ 07 июля 2010

вы должны пойти на AppDomain

http://www.codeproject.com/KB/cs/Assemblies___Appdomains.aspx

И еще один самый популярный http://www.west -wind.com / Weblog / сообщений / 601200.aspx

...