Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 现有应用程序中的MEF Global CompositionContainer_.net_Mef_Composition - Fatal编程技术网

.net 现有应用程序中的MEF Global CompositionContainer

.net 现有应用程序中的MEF Global CompositionContainer,.net,mef,composition,.net,Mef,Composition,我正在研究MEF作为现有.NET应用程序中插件解析的解决方案 在我能找到的所有示例中,主应用程序都创建了CompositionContainer的一个实例,并调用container.ComposeParts(this) 问题是,我的应用程序并非完全基于MEF构建,因此在对象图中存在一个没有MEF组件的漏洞。 因此,我的对象层次结构可能如下所示: 应用程序(MEF容器)->ObjectB (无MEF)->ObjectA(需要MEF (进口) 在这个对象层次结构中,我不可能在应用程序上调用conta

我正在研究MEF作为现有.NET应用程序中插件解析的解决方案

在我能找到的所有示例中,主应用程序都创建了CompositionContainer的一个实例,并调用container.ComposeParts(this)

问题是,我的应用程序并非完全基于MEF构建,因此在对象图中存在一个没有MEF组件的漏洞。 因此,我的对象层次结构可能如下所示:

应用程序(MEF容器)->ObjectB (无MEF)->ObjectA(需要MEF (进口)

在这个对象层次结构中,我不可能在应用程序上调用container.composepart(this)并期望应用程序创建ObjectB并满足ObjectA的导入

全局公开CompositionContainer是一种好的做法,这样我就可以在应用程序启动之后编写ObjectA,还是必须重新构造整个应用程序以支持线性MEF对象图

曝光照片是一种好的做法吗 全局合成容器

我不认为这是一种好的做法,但当不可能在任何地方引入控制反转原理时,这是一种合理的折衷。有时,现有的代码库不完全在您的控制之下,或者是.NET和本机代码(例如COM组件)的复杂混合,或者太大而无法重构

在Silverlight中,从XAML构造对象也不在MEF的控制范围内,因此Microsoft引入了基本相同的解决方案:默认的MEF容器可以作为全局容器访问,并通过
PartInitializer.SatisfyImports调用(这一点)

请注意,遵循此模式将全局的任何使用者紧密耦合到MEF和用于公开它的全局变量。无法像在其他应用程序或其他IoC容器中那样重用此代码。它还将使单元测试复杂化