在StockTraderRI示例代码中,MEF使用属性注入ViewModel:
[Export(typeof(IOrdersView))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class OrdersView : UserControl, IOrdersView
{
public OrdersView()
{
InitializeComponent();
}
[Import]
[SuppressMessage("Microsoft.Design", "CA1044:PropertiesShouldNotBeWriteOnly", Justification = "Needs to be a property to be composed by MEF")]
public IOrdersViewModel ViewModel
{
set { this.DataContext = value; }
}
}
我想知道的是:为什么不使用像这样的ImportingConstructor来注入ViewModel:
[Export(typeof(IOrdersView))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class OrdersView : UserControl, IOrdersView
{
[ImportingConstructor]
public OrdersView(IOrdersViewModel ViewModel)
{
InitializeComponent();
this.DataContext = ViewModel;
}
}
是否有特殊功能,问题或原因我想念为什么StockTraderRI样本确实使用了Property而不是ctor的参数?
答案 0 :(得分:5)
因为在XAML中部分定义的类型不能很好地与参数化构造函数一起使用。 XAML建立在“创建一个空白对象并在之后填充属性”范例之后。