0

現在、ビューモデルに次のコンストラクターがあります

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

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

アプリケーションのPrismとMEFをモジュール化しようとしています。モジュールは正常に動作しますが、ビューモデルの1つで問題が発生しています。

私の問題は、コンストラクターで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 に答える