• MEF 生命周期PartCreationPolicy


    为什么要单独把这个生命周期捞出来单独说一说呢?因为我今天就被这个东东坑了一把……新加了一个界面,第二次打开界面的时候会报错“指定的元素已经是另一个元素的逻辑子元素”。好嘛,我一看,哟,感觉就是xaml有问题啊。当然这个代码是基于MEF框架MVVM模式的。

        [Export("ViewA", typeof(IView))]
        public partial class ViewA : UserControl,IView
        {
            public ViewA()
            {
                InitializeComponent();
            }
        }
        [Export("ViewB", typeof(IView))]
        [PartCreationPolicy(CreationPolicy.NonShared)]
        public partial class ViewB : UserControl,IView
        {
            public ViewB()
            {
                InitializeComponent();
            }
        }

    为了确认是View层的问题,我就换了一下Import的View层(A变为B),结果多次打开界面也没有问题,说明什么?A.xaml果断是有问题的。是把xaml中的所有控件都清除,只保留最底层的Grid,再打开还是报一样的错。跟踪也看不出来,ViewModel没有问题,View的xaml也没有问题,那就只能是View的CodeBehind有问题了,一比对,果然发现少写了PartCreationPolicy。

    上面的内容可能说的不是很清楚,但是只要知道,如果再系统中需要关闭某个界面,再重新打开时需要新创建一个实例的就不能忘记设置PartCreationPolicy.

  • 相关阅读:
    fork()和僵尸进程
    布尔变量面试题
    vue学习之二
    vue学习之一
    圈复杂度
    phpExcel与jq的ajax
    Object.defineProperty与修改某个数组实现监听效果
    mpn不得不说的坑
    论javascript编写优美
    微信小程序之学习
  • 原文地址:https://www.cnblogs.com/YunGy/p/5050867.html
Copyright © 2020-2023  润新知