现代UI wpf,如何使用构造函数注入添加ContentSource页面作为视图模型

时间:2014-08-15 18:57:26

标签: c# wpf modern-ui

我对现代ui框架很新。我正在添加新页面(usercontroller)作为ContentSource页面。 我正在使用IOC框架(IviewModels和ViewModels)。我收到错误,说没有找到加工构造函数。因为usercontroll默认构造函数注入了Iviewmodel对象。

我被困在这里,有些人可以帮助解决这个问题 感谢

this is my main window code + this is my usercontroll cs file
this is the error

1 个答案:

答案 0 :(得分:1)

正如您所发现的那样,您不能使用参数化构造函数,因为它们会破坏框架。 导航仅使用页面URI,没有其他额外参数。

那么,如何在没有参数化构造函数的情况下使用IoC? 您应该使用依赖注入容器。 像这样:

public partial class MyPage: UserControl
{
  private MyViewModel: IViewModel;
  public MyPage()
  {
     MyViewModel = MyViewModelFactory.Create(IViewModel);
     InitializeComponent();
  }
}

MyVewModelFactory是一个创建其他对象的对象。 你不必自己编码。 一些常见的IoC容器是:

  1. Unity
  2. MEF
  3. 使用Unity您的代码将是:

    public partial class MyPage: UserControl
    {
      private MyViewModel: IViewModel;
      public MyPage()
      {
        MyViewModel = container.Resove<IViewModel>();
        InitializeComponent();
      }
    }
    

    使用MEF您的代码将是:

    public partial class MyPage: UserControl
    {
      [Import(GetType(IViewModel))]
      private MyViewModel: IViewModel;
      public MyPage()
      {
         InitializeComponent();
      }
    }