我想扩展MefModuleManager。现在我正在寻找一种方法来做到这一点。 首先,我创建了自己的ModuleManager:
public class MyModuleManager : MefModuleManager {
public MyModuleManager(IModuleInitializer moduleInitializer, IModuleCatalog moduleCatalog, ILoggerFacade loggerFacade) : base(moduleInitializer, moduleCatalog, loggerFacade) {
}
protected override void HandleModuleTypeLoadingError(ModuleInfo moduleInfo, Exception exception) {
// ... my Code
}
}
现在,在我的壳牌中,我(如Prism with Mef所述):
// The shell imports IModuleManager once to load modules on-demand.
// Due to SilverLight/MEF restrictions this must be public.
[Import(AllowRecomposition = false)]
public IModuleManager ModuleManager
我不知道,如何告诉Mef,MyModuleManager
应使用MefModuleManager
代替IModuleManager
。
答案 0 :(得分:1)
为了让 MefBootStrapper 使用不同的依赖项,您需要使用 [Export] 属性声明自定义类。
然后,如果您希望 Mef 将自定义 ModuleManager 用于特定类型类,您可以在属性上添加一个参数,用于指定依赖类型解决如下:
[Export(typeof(IModuleManager))]
public class MyModuleManager : MefModuleManager
{
[ImportingConstructor]
public MyModuleManager(IModuleInitializer moduleInitializer, IModuleCatalog moduleCatalog, ILoggerFacade loggerFacade) : base(moduleInitializer, moduleCatalog, loggerFacade) {
}
protected override void HandleModuleTypeLoadingError(ModuleInfo moduleInfo, Exception exception) {
// ... my Code
}
}
请注意,我添加了 [ImportingConstructor] 属性,因此 BootStrapper 可以在初始化时传递请求的参数。这样,当 IModuleManager 实例发出请求时, Mef 会使用您的自定义 ModuleManager 。
有关详细信息,请参阅以下 MSDN棱镜指南一章:
我希望这有所帮助,问候。