5

假设我有一个类,其中包含一组标记有[Import]属性的字段,所有这些字段都禁止重组

在某些时候,这个类是使用实例化的,new MyClassWithInjectedFields(...)并且所有相应的依赖项都是使用MEF框架注入的——没什么大不了的,只有双射Export-To-Import映射。

问题:

  • 假设在这种情况下注入字段的值将保持不变,直到类实例被垃圾收集,是否安全?

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

(我是新手MEF,我不确定是否有办法在运行时影响依赖关系图,但是,显然可能有)。

4

1 回答 1

6

1) MEF 没有对 GC 做任何特殊的事情,因此在没有更多对对象的实时引用之前,不会对实例进行 GC。

2) 如果 Imports 未标记为可重新组合,则 MEF 只会更改 Imports 的值。您不能在正在运行的 .NET 进程中卸载\重新加载程序集,您可以卸载 AppDomain,但这样做实际上会强制终止对象引用,但 MEF 不会做任何特殊的事情来重置它们。

于 2012-10-10T01:57:04.270 回答