我目前在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服务?还是应该呢?
由于
答案 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.
}
}
}