Устойчивая сменная система C#

Я пишу инструмент, который общается с больше чем одной системой управления версиями, или подверсия или clearcase, и имеет различные утилиты, которые могут быть включены в него. Я, хотя из использования MEF для загрузки поставщиков управления версиями и утилит, обе из которых имеют интерфейсы definied для них.

Я начал использовать MEF для этого. Но если загрузка любых сменных сбоев (на половине моих клиентских машин, привязка ClearCase COM не будет присутствовать, таким образом загружаясь, перестанет работать, на другой половине SVN не будет установлен, таким образом, плагин SVN не загрузится), хотя, MEF выдает исключение и никакие сменные работы; я надеялся, что остальная часть плагинов загрузится.

    [ImportMany(AllowRecomposition = true)]
    public IEnumerable<IVersionControl> RegisteredProviders { get; private set; }

Вместо этого если каким-либо поставщикам не удается создать себя, то RegisteredProviders является пустым.

Существует ли простой способ настроить MEF для достижения этого (создание отчетов об исключениях, но загрузка других экземпляров), или я должен изменить интерфейс для задержки их отказа инициализации, пока MEF не инстанцировал объектов?

1
задан Pete Kirkham 22 May 2010 в 13:51
поделиться

1 ответ

Это зависит от того, когда именно возникает исключение. Возможно, вы сможете добиться желаемого, изменив импорт на такой:

[ImportMany(AllowRecomposition = true)]
public IEnumerable<Lazy<IVersionControl>> RegisteredProviders { get; private set; }

Это может отсрочить исключение до тех пор, пока вы не получите доступ к свойству Value в Lazy.

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

2
ответ дан 3 September 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: