MEF - Должен ли быть установлен импорт каким-либо образом или он может быть нулевым? - PullRequest
2 голосов
/ 29 июля 2011

В основном у меня есть следующее:

[Import]
private IEventAggregator EventAggregator { get; set; }

public void DoSomething()
{
    //Should I bother to check for null here before using EventAggregator?
}

Сначала пара вещей:

  1. Возможно ли, чтобы мое приложение не имело исключение времени выполнения MEF и оставилоэто свойство как null?
  2. Поскольку свойство является личным, стоит ли проверять наличие нулевого значения в каждом методе?Я думал, что если однажды я решу НЕ использовать MEF и сделать что-то еще.Я по-прежнему буду гарантировать, что он не может быть нулевым при создании экземпляра, так что мне все равно нужно защищаться от него?
  3. Что, если он был защищен вместо этого, должно ли это дать мне достаточно оснований для защиты от нуля, потому что сейчасрасширяющие классы могли бы установить это в нуль.Или это то, о чем мне не стоит беспокоиться (другие программисты расширяют мой класс и делают с ним глупости).

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

1 Ответ

6 голосов
/ 29 июля 2011

Поведение по умолчанию с MEF - генерировать исключение, когда определения не могут быть созданы из-за отсутствующих частей.Вы можете решить эту проблему, изменив атрибут [Import] на [Import(AllowDefault = true)], что позволит использовать нулевые значения при отсутствии экспорта.Это, очевидно, повлияет на ваш код, так как вам нужно явно проверить null в вашем методе DoSomething.

Что касается видимости доступа, определение свойства импорта как private означает, что оно не можетбыть изменены внешне, чтобы с этой целью ... можете ли вы гарантировать, что это свойство будет установлено правильно?Если нет, вам нужно проверить на null.

...