【问题标题】:MVVM, MEF, Silverlight and Service AgentMVVM、MEF、Silverlight 和服务代理
【发布时间】:2013-03-20 20:30:56
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: silverlight mvvm mef


    【解决方案1】:

    处理此问题的最简单方法是公开 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.
            }
        }
    }
    

    【讨论】:

    • 我已经做过类似的事情但忘记添加 CompositionInitializer.SatisfyImports(this); !!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多