在WPF MVVM Unity,Generic Repository中苦苦挣扎

时间:2012-10-25 19:05:34

标签: wpf dependency-injection unity-container

如何将CustomerRepository注入CustomerVM视图模型?在我看来,我有一个WPF页面:

<Page.DataContext>
    <viewModel:CustomerVM/>
</Page.DataContext>

但是我的视图模型构造函数显然已传入参数,

    public CustomerVM(ICustomerRepository customerRepository)
    {
        //this._customerRepository = customerRepository;
    }

我得到了

  

类型'CustomerVM'不能用作对象元素,因为它不是   public或不定义公共无参数构造函数或类型   转换器。

真的很挣扎。

任何帮助表示感谢。

1 个答案:

答案 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)));