Skip to main content
 首页 » 编程设计

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

2024年11月24日24java哥

基本上我有以下内容:

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

首先有几件事:

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

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

请您参考如下方法:

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

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