Prism / mef ViewModel: за и против свойства против ctor - PullRequest
2 голосов
/ 04 января 2011

В примере кода 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 использует свойство вместо параметра для ctor?

1 Ответ

5 голосов
/ 04 января 2011

Поскольку типы, частично определенные в XAML, не очень хорошо работают с параметризованными конструкторами. XAML построен на парадигме «создай пустой объект и затем заполни свойства».

...