如何将CustomerRepository注入CustomerVM视图模型?在我看来,我有一个WPF页面:
<Page.DataContext> <viewModel:CustomerVM/> </Page.DataContext>
但是我的视图模型构造函数显然已传入参数,
public CustomerVM(ICustomerRepository customerRepository) { //this._customerRepository = customerRepository; }
我得到了
类型'CustomerVM'不能用作对象元素,因为它不是 public或不定义公共无参数构造函数或类型 转换器。
真的很挣扎。
任何帮助表示感谢。
答案 0 :(得分:1)
如果你使用依赖注入,我认为你不能在XAML中初始化DataContext。在视图的代码隐藏中设置DataContext,以便Unity可以解析依赖关系。尝试将此添加到YourView.xaml.cs:
public YourView(CustomerVM viewModel)
{
InitializeComponent();
this.DataContext = viewModel;
}
如果您通过Unity解析您的观点,以上内容将有效。如果没有,您还可以使用ServiceLocator来解析视图模型:
using Microsoft.Practices.ServiceLocation;
public YourView()
{
InitializeComponent();
this.DataContext = ServiceLocator.Current.GetInstance<CustomerVM>();
}
如果您不使用Prism,您可能还需要在注册码中的某处添加以下内容来设置ServiceLocator:
ServiceLocator.SetLocatorProvider(new ServiceLocatorProvider(() => new UnityServiceLocator(_unityContainer)));