Autofac - как зарегистрировать 2 разные версии одного типа с одинаковым именем - PullRequest
0 голосов
/ 26 сентября 2018

Нужна помощь по этому вопросу.Буду очень признателен.

Я пытаюсь зарегистрировать несколько версий типа для обеспечения обратной совместимости в API.Этот API позволит выполнять операции с использованием более старых версий кода.

Мой код выполняет следующие действия для этого:

  1. Загрузка каждой версии каждого типа DLL впамять.

    foreach (var directory in Directories)
    {
        assembliesToLoad.AddRange(directory.EnumerateFiles("*.dll").Select(file => Assembly.LoadFile(file.FullName)));
    }
    foreach (var assembly in assembliesToLoad)
    {
        RegisterActivityTypesFromAssembly(assembly);
    }
    
  2. Зарегистрируйте их, используя 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);
        }
    }
    
  3. Затем я загружаю его позже в конвейер на основеверсия, указанная в API.

    var autofacTypeId = $"{_typeId}@{_version}";
    _activity = Scope.ResolveNamed<IActivity>(autofacTypeId);
    

Я заметил, что этот код разрешит текущую версию типа без проблем.Попытка разрешить старые версии не удалась.Что я здесь не так делаю?Похоже, что старые версии почему-то исчезают, хотя на этапе загрузки они выглядят нормально загруженными после отражения.

Любая помощь будет принята с благодарностью.

...