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

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

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

最佳答案

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

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

关于c# - MEF - 是否必须以某种方式设置导入或者它们可能为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6875662/

相关文章:

c# - iTextSharp : table in landscape

c# - 检查字符串不为空、不为空且不为 "0000"的最简单方法是什么?

c# - 获取独立于文化(区域设置)的 WMI 属性

c# - 如何显示满足所有导入的 UserControl

c# - Sharepoint 上传文件 'Specified argument was out of range of valid values'

c# - BeginInvoke 未在 WPF 应用程序的线程内触发

c# - GridSplitter移至外部资源(UserControl)时的行为有所不同

c# - WPF ClickOnce : How are Digest values calculated

visual-studio-2010 - Visual Studio 包构建和私有(private) bin 路径中的 DLL

.net - 为什么我的 MEF 部分对插件主机不可见?