0

我的视图模型中目前有以下构造函数

    public CartViewModel() : this(new PayPalCompleted()) { }

    public CartViewModel(IPayPalCompleted serviceAgent)
    {
        if (!IsDesignTime)
        {
            _ServiceAgent = serviceAgent;
            WireCommands();
        }
    }

我正在尝试模块化我的应用程序 Prism 和 MEF。我的模块工作正常,但我的一个视图模型有问题。

我的问题是我需要在构造函数中导入 EventAggregator 但我遇到了关于如何使用无参数构造函数以及导入构造函数执行此操作的问题

    [ImportingConstructor]
    public CartViewModel([Import] IEventAggregator eventAggregator)
    {
        if (!IsDesignTime)
        {
            _ServiceAgent = new PayPalCompleted();
            TheEventAggregator = eventAggregator;
            WireCommands();

        }
    }

即我想做这样的事情

      public CartViewModel() : this(new PayPalCompleted(),  IEventAggregator  eventAggregator) { }

    [ImportingConstructor]
    public CartViewModel(IPayPalCompleted serviceAgent, IEventAggregator eventAggregator)
    {
             ...stuff
     }

我知道哪个不正确...什么是?

我认为,部分问题在于,当使用导入构造函数时,构造函数中的参数默认为导入参数——这意味着它们需要相应的导出才能使 MEF 能够正确组合。这可能意味着我应该导出我的 paypay 服务?还是应该?

谢谢

4

1 回答 1

0

处理此问题的最简单方法是公开 IEventAggregator 类型的属性,实现 IPartImportsSatisifiedNotification 并在该方法中处理事件订阅。

像这样的东西

public class CartViewModel : IPartImportsSatisfiedNotification
{
    private readonly IPayPalCompleted _serviceAgent;

    public CartViewModel(IPayPalCompleted serviceAgent)
    {
        this._serviceAgent = serviceAgent;
        CompositionInitializer.SatisfyImports(this);
    }

    [Import]
    public IEventAggregator EventAggregator { get; set; }

    void IPartImportsSatisfiedNotification.OnImportsSatisifed()
    {
        if (EventAggregator != null)
        {
            // Subscribe to events etc.
        }
    }
}
于 2013-03-24T08:05:03.753 回答