3

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

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

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

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

我明白了

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

真的很挣扎。

任何帮助表示赞赏。

4

1 回答 1

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)));
于 2012-10-25T19:28:21.243 回答