MVVM,MEF,Silverlight和Service Agent

时间:2013-03-20 20:30:57

标签: silverlight mvvm mef

我目前在viewmodel中有以下构造函数

    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服务?还是应该呢?

由于

1 个答案:

答案 0 :(得分: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.
        }
    }
}