If you use Prism InteractionRequest.PopupWindowAction feature, you might have found the MEF Import attribute does not work in the popup window.

This is because PopupWindowAction.WindowContent property creates a new instance of your xaml usercontrol which caused the conflit to MEF principal and consequently the Import chain is broken here.

My workaround is not to use xaml code for the interaction which may look like this:

<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding BizSelectionRequest, Mode=OneWay}">
<PopupWindowAction CenterOverAssociatedObject="True"
IsModal="True">
<PopupWindowAction.WindowContent>
<views:BizSearch />
</PopupWindowAction.WindowContent>
</PopupWindowAction>
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>

Instead, you can comment the above xaml code and create the expected interaction in your code behind:

                var triggerCollection = System.Windows.Interactivity.Interaction.GetTriggers(this);
InteractionRequestTrigger trigger = new InteractionRequestTrigger();
var binding = new Binding(“BizSearchRequest");
binding.Source = this.DataContext;
BindingOperations.SetBinding(trigger, InteractionRequestTrigger.SourceObjectProperty, binding);
PopupWindowAction pwa = new PopupWindowAction();
pwa.WindowContent = v;
pwa.WindowContent.DataContext = vm;
pa.CenterOverAssociatedObject = true;
pa.IsModal = true;
trigger.Actions.Add(pa);
triggerCollection.Add(trigger);

The "v" and "vm" are imported by MEF

[Import]
BizSearchPopup bizSearchPopup; [Import]
BizSearchPopupViewModel bizSearchPopupViewModel;

By this trick, a little dirty though, whatever you import within your BizSearchPopup or BizSearchPopupViewModel should work.

PopupWindowAction breaking MEF import?的更多相关文章

  1. Practical Go: Real world advice for writing maintainable Go programs

    转自:https://dave.cheney.net/practical-go/presentations/qcon-china.html?from=timeline   1. Guiding pri ...

  2. C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

    上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ...

  3. MEF 导入(Import)和导出(Export)

    前言: MEF不同于其他IOC容器(如:Castle)很重要的原因在于它使用了特性化编程模型(涉及到两个概念:“特性”和“编程模型”). 特性(Attribute):举例来说就是我们在开发过程中在类上 ...

  4. MEF学习

    一.   什么是MEF MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置. 扩 ...

  5. 如何用 MEF 扩展应用程序

    最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后 ...

  6. NET 自带IOC容器MEF指初体验

    转自:http://www.cnblogs.com/ulex/p/4186881.html IOC容器:工具较多,大体功能都相同,大都需要事先对接口与实现进行配对(通过代码或配置文件),然后由系统自动 ...

  7. 实战MEF(3):只导出类的成员

    通过前面两篇文章的介绍,相信各位会明白MEF中有不少实用价值.上一文中我们也讨论了导入与导出,对于导出导入,今天我们再深入一点点,嗯,只是深入一点点而已,不会很难的,请大家务必放心,如果大家觉得看文章 ...

  8. 实战MEF(2):导出&导入

    上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路.本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF. 在上一文中我们知道,对于每一个实现了公共规范的扩展组件 ...

  9. 实战MEF(1):一种不错的扩展方式

    在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而 ...

随机推荐

  1. jQuery实现全选效果【转】

    这是一段用jquery实现全选的代码,主要思路如下: 1.所有的复选框都有单击事件,所有效果都是在单击事件下实现的 2.全选复选框所实现的功能与其他复选选项实现的功能不同,所有在单击事件内做一个判断, ...

  2. javascript继承机制的设计思想(ryf)

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  3. ZK 页面间参数传递

    1.execution.sendRedirect(url) 当使用方法execution.sendRedirect(url)进行页面跳转时,在url中添加参数:url?test=5: 跳转页面获取参数 ...

  4. java核心技术第一卷

    sell窗口(dos窗口命令)中要注意大小写: 编译java文件需要加上扩展名,运行java.class时只要文件名java,不需要扩展名:

  5. 1.Powershell认识

    Windows PowerShell 是一种命令行外壳程序和脚本环境,自Windows Server 2008开始就有内置于系统当中,有取代CMD之势.管理员使用Powershell完成一些日常重复的 ...

  6. php如何查看变量是真实被引用

    $var1 = 'Hello World'; $var2 = ''; $var2 =&$var1; debug_zval_dump(&$var1); $a = "aaa&qu ...

  7. 【RabbitMQ】 WorkQueues

    消息分发 在[RabbitMQ] HelloWorld中我们写了发送/接收消息的程序.这次我们将创建一个Work Queue用来在多个消费者之间分配耗时任务. Work Queues(又称为:Task ...

  8. alfresco category searches...

    From page 475 of the Alfresco Developer Guide- Category searches use the PATH field, but you constru ...

  9. SSH登录远程主机执行脚本找不到环境变量

    这是因为在Linux上,bash会有四种模式,根据不同的case,Linux会加载不同模式的bash.一般如果你自己直接登录主机,能看到环境变量,但是使用ssh 远程登录执行脚本就找不到环境变量,那么 ...

  10. PHP 获取两个日期之间的日期数组/月份数组

    function getEmptyArr($s_time,$e_time,$type){ $tmp = array(); if($type=='day'){ $s_time = strtotime($ ...