MEF -导入是否必须以某种方式设置,或者它们可能为空

本文关键字:或者 设置 方式 是否 导入 MEF | 更新日期: 2023-09-27 18:03:51

基本上我有以下内容:

[Import]
private IEventAggregator EventAggregator { get; set; }
public void DoSomething()
{
    //Should I bother to check for null here before using EventAggregator?
}

先说几句:

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

问题2还涉及以下问题:即使我们检查的属性是在类中维护的,我们是否应该检查是否为null(也就是说,我们应该保护类的状态以防止出现这种情况)

MEF -导入是否必须以某种方式设置,或者它们可能为空

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

在访问可见性方面,将您的import属性定义为private意味着它不能在外部更改,因此为此目的…你能保证这个属性会被正确设置吗?如果没有,则需要检查null