我对现代 ui 框架很陌生。我正在将新页面(用户控制器)添加为 ContentSource 页面。我使用 IOC 框架(IviewModels 和 ViewModels)。我收到错误消息,说没有找到加工构造函数。因为 usercontroll 默认构造函数注入了 Iviewmodel 对象。
我很困在这里,如果有人可以帮助解决这个问题,那就太好了,
谢谢
我对现代 ui 框架很陌生。我正在将新页面(用户控制器)添加为 ContentSource 页面。我使用 IOC 框架(IviewModels 和 ViewModels)。我收到错误消息,说没有找到加工构造函数。因为 usercontroll 默认构造函数注入了 Iviewmodel 对象。
我很困在这里,如果有人可以帮助解决这个问题,那就太好了,
谢谢
正如您所发现的,您不能使用参数化构造函数,因为它们破坏了框架。导航仅使用页面 URI,没有其他额外参数。
那么,如何在没有参数化构造函数的情况下使用 IoC?您应该使用依赖注入容器。像这样的东西:
public partial class MyPage: UserControl
{
private MyViewModel: IViewModel;
public MyPage()
{
MyViewModel = MyViewModelFactory.Create(IViewModel);
InitializeComponent();
}
}
MyVewModelFactory 是一个创建其他对象的对象。您不必自己编写代码。一些常见的 IoC 容器是:
使用 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();
}
}