Mvvm 围绕MEF思考:如何加载视图(模型)?
我正在学习使用MEF加载模块的prism V4。加载模块确实有效,但在一个模块中,我想加载一个视图/视图模型(MVVM),但不知道如何让MEF为我解决所有这些问题 首先:我需要如何标记ViewModel(我遵循StockTraderRI示例),以便它不会在启动时加载,而是可以在运行时加载到区域中 第二:如何使用MEF加载ViewModel,使其连接到相应的接口Mvvm 围绕MEF思考:如何加载视图(模型)?,mvvm,prism,mef,loading,Mvvm,Prism,Mef,Loading,我正在学习使用MEF加载模块的prism V4。加载模块确实有效,但在一个模块中,我想加载一个视图/视图模型(MVVM),但不知道如何让MEF为我解决所有这些问题 首先:我需要如何标记ViewModel(我遵循StockTraderRI示例),以便它不会在启动时加载,而是可以在运行时加载到区域中 第二:如何使用MEF加载ViewModel,使其连接到相应的接口 MEF对启动时标记为[Export]的东西做得非常好,但我不知道如何在运行时实现这一点。您可以使用称为a的东西,以便在显式使用它之前不会
MEF对启动时标记为[Export]的东西做得非常好,但我不知道如何在运行时实现这一点。您可以使用称为a的东西,以便在显式使用它之前不会解析接口
如果需要创建多个实例,MEF并不特别支持这一点。您可以自己进行发现和实例化,也可以这样定义导出:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(ISomething)]
public class Something : ISomething { }
缺点是,现在无论您需要在哪里创建实例,都需要有对实际容器实例的引用。然后你可以做:
var something = _container.GetExportedObject<ISomething>();
var something=\u container.GetExportedObject();
编辑:好吧,我想我更明白你在追求什么。我通常是这样解决这个问题的:
我更多的是在寻找像MefMagic.Create这样的东西,它将创建所需的MyView?您希望创建相同类型的多个实例吗?不(至少还没有)。视图/视图模型应该被创建并以某种方式焊接在一起。正如我所说:当视图自动加载到适当的区域时,它就像魅力一样工作。现在我只想知道,当我想将其他视图/视图模型加载到某个区域时,如何手动完成此操作。@Sam,\u container是您在启动时创建的用于承载所有导出零件的CompositionContainer。这是该方法的不幸一面,因为现在需要传递容器。一种方法是创建一个静态主机类,应用程序的不同部分可以在其中访问容器。基本上,您回到了旧的服务定位器模式,有一个中心位置来请求实例。