MEF导入问题

时间:2011-02-01 09:07:38

标签: wpf mef caliburn.micro

我在使用MEF的视图模型类中将接口类导入接口时遇到问题。

我查看模型我创建属性:

    [Import]
    private IEventAggregator EventAgg { get; set; }

我希望在视图模型的构造函数中对此事件聚合器进行描述:

所以我试试这个:

    public MessengerViewModel()
    {
        EventAgg.Subscribe(this);
    }

我运行应用但应用冻结。

所以我在OnImportsSatisfied方法中尝试订阅事件聚合器:

    public void OnImportsSatisfied()
    {
        EventAgg.Subscribe(this);
    }

但是,在创建视图模型类时,此方法永远不会调用。

只有解决方案才有效:

    [ImportingConstructor]
    public MessengerViewModel(IEventAggregator eventAggregator)
    {
        EventAgg = eventAggregator;
        EventAgg.Subscribe(this);
    }

前两种方式有什么不好?

2 个答案:

答案 0 :(得分:2)

  1. 您不能在私有财产上使用property(setter)注入
  2. 如果您希望MEF自动调用OnImportsSatisfied
  3. ,您应该在ViewModel上实现IPartImportsSatisfiedNotification

答案 1 :(得分:1)

第一种方法不起作用,因为在调用构造函数时,EventAgg依赖项仍然为null。

只要您的视图模型实现OnImportsSatisfied接口,IPartImportsSatisfiedNotification的第二种方法就可以正常工作。