访问构造函数外部的容器

本文关键字:外部 构造函数 访问 | 更新日期: 2023-09-27 18:36:47

使用 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下,除了更新用户控件外,我还想做一个单独的调用,这将在数据库下保存特定用户的更改(我的IEmployeeRepository会处理所有更改)。

这就是为什么我需要找到一种方法,如何以这种"正确"的方式实现它。我当然可以重新设置此控件的模板样式并重新绑定"确定"和"取消"按钮,但我不认为这是要走的路。

最后

ServiceLocator做到了。这是代码:

_employeeRepository = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IEmployeeRepository>();

访问构造函数外部的容器

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

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