我需要在我的WPF应用程序中使用MEF和MVVM模式。
实际上我有一个如此定义的ViewModel:
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
class MainVM
{
IServiceA serviceA;
IServiceB serviceB;
[ImportingConstructor]
public MainVM(IServiceA serviceA, IServiceB serviceB)
{
this.serviceA = serviceA;
this.serviceB = serviceB;
System.Diagnostics.Debug.WriteLine(serviceA.Time);
}
}
对于VM检索,我使用了VMLocator,因此:
class ViewModelLocator
{
static ViewModelLocator instance;
public MainVM MainVM
{
get
{
MainVM output = MefBootstrap.Container.GetExportedValue<MainVM>();
return output;
}
}
protected ViewModelLocator()
{
}
public static ViewModelLocator Instance
{
get
{
return instance ?? (instance = new ViewModelLocator());
}
}
}
从XAML调用:
DataContext="{Binding Source={x:Static provider:ViewModelLocator.Instance}, Path=MainVM}"
此代码确实有效。
我想知道是否可以实现在VMLocator的属性声明中仅使用MEF ExportAttribute [Import] 而不是使用 GetExportValue()方法自动导入VM。
有任何解决方案吗?