У меня есть система, которая использует MEF для загрузки деталей.Каждая из этих частей основана на базовой библиотеке.Когда я собираю проект, я добавляю номер версии в файлы .dll следующим образом:
- part1-1.0.0.0.dll
- part2-1.0.0.0.dll
Также есть приложение, которое выполняет MEF-композицию.Он также использует библиотеку ядра.Я обнаружил, что могу просто развернуть dll-файлы «part», и композиция работает нормально, потому что приложение уже загрузило базовую библиотеку, на которую опираются части.Моя файловая система выглядит примерно так:
- / parts / part1-v1.dll
- / parts / part2-v1.dll
- composer-v1.exe
- core-v1.exe
Проблема, с которой я сталкиваюсь, заключается в том, как управлять версиями ядра и частей.Предположим, я делаю обновление для ядра и одной из частей.Затем я внедряю изменения.Поэтому теперь моя файловая система может выглядеть примерно так:
- / parts / part1-v1.dll
- / parts / part1-v2.dll
- / parts /part2-v1.dll
- composer-v1.exe
- core-v1.dll
- core-v2.dll
Как я могуубедитесь, что part1-v1.dll использует core-v1.dll, а part1-v2.dll использует core-v2.dll?Мне нужно загрузить все версии деталей и использовать соответствующую версию ядра.
Классы деталей выглядят примерно так:
[Export(typeof(IPart))]
public class Part1
{
public string GetSomethingFromCore()
{
return Core.GetSomethingFromCore();
}
}
[Export(typeof(IPart))]
public class Part2
{
public string GetSomethingFromCore()
{
return Core.GetSomethingFromCore();
}
}