访问构造函数外部的容器
本文关键字:外部 构造函数 访问 | 更新日期: 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
可以在任何地方为您提供任何依赖项。
但要小心,因为依赖关系几乎是隐藏的。