1

我在使用 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);
    }

前两种方式有什么不好?

4

2 回答 2

2
  1. 您不能在私有属性上使用属性(设置器)注入
  2. IPartImportsSatisfiedNotification如果您希望 MEF 自动调用 OnImportsSatisfied,则应在您的 ViewModel 上实现
于 2011-02-01T09:24:04.923 回答
1

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

OnImportsSatisfied只要您的视图模型实现了接口,第二种方法应该可以工作IPartImportsSatisfiedNotification

于 2011-02-01T09:24:38.480 回答