1

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

我很困在这里,如果有人可以帮助解决这个问题,那就太好了,
谢谢

这是我的主窗口代码 + 这是我的 usercontroll cs 文件
这是错误

4

1 回答 1

1

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

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

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

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

  1. 统一
  2. MEF

使用 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();
  }
}
于 2014-12-23T14:28:11.930 回答