MEF и DirectoryCatalog - PullRequest
       24

MEF и DirectoryCatalog

9 голосов
/ 20 июля 2011

Есть ли способ безопасно использовать DirectoryCatalog для обработки, если каталог не существует?

Вот пример кода того, как настроен мой контейнер:

    //Create an assembly catalog of the assemblies with exports
    var catalog = new AggregateCatalog(
        new AssemblyCatalog(Assembly.GetExecutingAssembly()),
        new AssemblyCatalog(Assembly.Load("My.Second.Assembly")),
        new DirectoryCatalog("Plugins", "*.dll"));

    //Create a composition container
    var container = new CompositionContainer(catalog);

Но исключениевыбрасывается, если каталог не существует, и я хотел бы игнорировать эту ошибку.

1 Ответ

9 голосов
/ 20 июля 2011

Очевидно, нет, если выдается исключение. Просто создайте каталог до запуска установки контейнера MEF, и тогда не будет выдано никакой ошибки.

Согласно документации :

Путь должен быть абсолютным или относительным к AppDomain.BaseDirectory.

PsuedoCode для проверки каталога:

    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins");

    //Check the directory exists
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }

    //Create an assembly catalog of the assemblies with exports
    var catalog = new AggregateCatalog(
        new AssemblyCatalog(Assembly.GetExecutingAssembly()),
        new AssemblyCatalog(Assembly.Load("My.Other.Assembly")),
        new DirectoryCatalog(path, "*.dll"));

    //Create a composition container
    _container = new CompositionContainer(catalog);  
...