MEF 导入解析

5
假设我有一个类,其中一组字段带有标记为[Import]的属性,所有这些字段都禁止recomposition
在某个时刻,使用new MyClassWithInjectedFields(...)实例化此类,并使用MEF框架注入所有相应的依赖项——没有什么严重的问题,只有双射Export-To-Import映射。
问题:
  • 可以安全地假定在这种情况下,注入字段的值将保持不变,直到类实例被垃圾回收吗?

  • 或者也许有一些罕见/模糊的情况,它们可能会在运行时被MEF隐式更改?也许是当有人卸载或重新加载用于依赖项分辨率的程序集时?

(我对MEF还不熟悉,我真的不确定是否有办法在运行时影响依赖关系图,但是,好吧,显然可能会有)。

1
如果您没有明确指定允许重新组合,那么如果有人尝试更改该导出的目录定义,则会抛出错误/异常。 - Johnny
1个回答

6

1) MEF并未对GC进行特殊处理,因此只有在没有对象的实例被引用时,它们才会被GC清除。

2) 如果导入的内容未标记为可重组,则MEF仅会更改导入内容的值。您无法在运行中的.NET进程中卸载\重新加载程序集,但可以卸载AppDomain,但这样做将基本上强制终止对象引用,但MEF不会执行任何特殊操作以重置它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接