Нужна помощь по этому вопросу.Буду очень признателен.
Я пытаюсь зарегистрировать несколько версий типа для обеспечения обратной совместимости в API.Этот API позволит выполнять операции с использованием более старых версий кода.
Мой код выполняет следующие действия для этого:
Загрузка каждой версии каждого типа DLL впамять.
foreach (var directory in Directories)
{
assembliesToLoad.AddRange(directory.EnumerateFiles("*.dll").Select(file => Assembly.LoadFile(file.FullName)));
}
foreach (var assembly in assembliesToLoad)
{
RegisterActivityTypesFromAssembly(assembly);
}
Зарегистрируйте их, используя Autofac в цикле.
var type = value.Key;
var version = $"{value.Value.Major}.{value.Value.Minor}.{value.Value.Build}";
var typeId = $"{keyValuePair.Key}@{version}";
if (type != null)
{
foreach (var interfaceType in type.GetInterfaces())
{
Builder.RegisterType(type).Named(typeId, interfaceType);
}
}
Затем я загружаю его позже в конвейер на основеверсия, указанная в API.
var autofacTypeId = $"{_typeId}@{_version}";
_activity = Scope.ResolveNamed<IActivity>(autofacTypeId);
Я заметил, что этот код разрешит текущую версию типа без проблем.Попытка разрешить старые версии не удалась.Что я здесь не так делаю?Похоже, что старые версии почему-то исчезают, хотя на этапе загрузки они выглядят нормально загруженными после отражения.
Любая помощь будет принята с благодарностью.