在构造函数

时间:2016-02-29 15:36:34

标签: c# wpf mvvm inversion-of-control unity-container

使用Unity,我可以通过构造函数注入各种控件/接口,如下所示:

    private readonly IEmployeeRepository _employeeRepository;

    public EmployeeView_EmployeeListViewModel(IEmployeeRepository employeeRepository)
    {
        _employeeRepository = employeeRepository;
    }

但是,我需要在构造函数之外访问特定控件(让我们说一个例子中使用的控件)(我无法编辑构造函数)。

有办法吗,怎么做?

修改 更多信息 - 我有一个DataForm,它允许用户在他们的DataGrid上进行简单的CRUD操作(简单的编辑表单)。此控件来自 Telerik inc。,因此它的命令类如下所示:

public class CustomDataFormCommandProvider : DataFormCommandProvider
{
    public CustomDataFormCommandProvider():base(null)
    {
    }
    protected override void MoveCurrentToNext()
    {
        if (this.DataForm != null)
        {
            this.DataForm.MoveCurrentToNext();
            this.DataForm.BeginEdit();
        }
    }

    protected override void MoveCurrentToPrevious()
    {
        if (this.DataForm != null)
        {
            this.DataForm.MoveCurrentToPrevious();
            this.DataForm.BeginEdit();
        }
    }

    protected override void CommitEdit()
    {
        if (this.DataForm != null && this.DataForm.ValidateItem())
        {
            this.DataForm.CommitEdit();
        }
    }

    protected override void CancelEdit()
    {
        if (this.DataForm != null)
        {
            this.DataForm.CancelEdit();
        }
    }
}

如果以任何方式更改构造函数,命令将停止工作(因此我无法将接口放入构造函数中)。

我需要做的是,在CommitEdit下,除了更新用户控件之外,我还想进行单独的调用,这样可以保存数据库下的特定用户更改(my {{1照顾所有)。

这就是为什么我需要找到一种方法,如何实现这一目标'正确的'办法。我可以肯定地重新设计这个控件的模板并重新绑定OK&取消按钮,但我不相信这是最佳选择。

FINAL

IEmployeeRepository完成了这项工作。这是代码:

ServiceLocator

1 个答案:

答案 0 :(得分:1)

ServiceLocator.Current.GetInstance可以在任何地方为您提供任何依赖。

但要小心,因为依赖性几乎是隐藏的。