使用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
答案 0 :(得分:1)
ServiceLocator.Current.GetInstance
可以在任何地方为您提供任何依赖。
但要小心,因为依赖性几乎是隐藏的。