Как предотвратить дублирование модуля с помощью MEF? - PullRequest
5 голосов
/ 10 ноября 2009

Как я могу запретить MEF загружать дубликаты модулей в случае наличия 2-х копий одной и той же сборки (возможно, по ошибке)

  • Assembly1.dll

  • Assembly2.dll (копия Assembly1)

    [ImportMany]
    public IList<IModule> Modules { get; private set; }
    
    public void BuildUp()
    {
        Modules = new List<IModule>();
    
        var catalog = new DirectoryCatalog(@".\Modules");
        var container = new CompositionContainer(catalog);
    
        container.ComposeParts(this);
    }
    

1 Ответ

2 голосов
/ 10 ноября 2009

Вместо использования DirectoryCatalog используйте AggregateCatalog. Вам нужно будет написать код, который просматривает все сборки в каталоге модулей, выясняет, является ли текущая копия дубликатом уже обработанной, и если нет, создает AssemblyCatalog для этой сборки и добавляет его в AggregateCatalog.

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

...