MEF - 必须以某种方式设置导入还是可能为空?

时间:2011-07-29 15:45:27

标签: c# wpf mef nullreferenceexception

基本上我有以下内容:

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

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

首先要介绍几件事:

  1. 我的应用程序是否有可能没有MEF运行时异常并将该属性保留为null?
  2. 由于属性是私有的,我是否应该在每个方法中检查null?我在想,如果有一天我决定不使用MEF并做其他事情。我仍然会确保它在实例化时不能为空,所以我还需要防范它吗?
  3. 如果它被保护了,应该给我足够的理由来防范null,因为现在扩展类可以将它设置为null。或者,这是我不应该担心的事情(其他程序员扩展我的课程并用它做蠢事)。

  4. 问题2还涉及以下问题:即使我们正在检查的属性是否在类中维护,我们是否应该检查null(即我们应该保护我们类的状态不允许这种情况)。

1 个答案:

答案 0 :(得分:6)

MEF的默认行为是在由于缺少部分而无法创建定义时抛出异常。您可以通过将[Import]属性更改为[Import(AllowDefault = true)]来解决此问题,这将在导出丢失时允许空值。这显然会影响您的代码,因为您需要在null方法中明确检查DoSomething

关于访问可见性,将导入属性定义为private意味着它无法在外部进行更改,因此为此...您能保证此属性设置正确吗?如果没有,您需要检查null