Autofac - как зарегистрировать 2 разные версии одного типа с одинаковым именем
Нужна помощь по этому вопросу. Буду очень признателен.
Я пытаюсь выполнить регистрацию нескольких версий типа для обеспечения обратной совместимости в 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);
Я заметил, что этот код разрешит текущую версию типа без проблем. Попытка разрешить старые версии не удалась. Что я здесь не так делаю? Кажется, что старые версии почему-то исчезают, хотя на этапе загрузки они выглядят нормально загруженными после отражения.
Любая помощь будет принята с благодарностью.