访问容器
问题描述:
对于Unity,我可以注入通过构造各种控制/接口,如以下:访问容器
private readonly IEmployeeRepository _employeeRepository;
public EmployeeView_EmployeeListViewModel(IEmployeeRepository employeeRepository)
{
_employeeRepository = employeeRepository;
}
然而,我需要访问特定控制(让我们说,在一个实施例中使用的一个)的外侧的构造函数(我不能编辑构造函数)。
有没有办法,怎么办?
编辑 更多信息 - 我有数据形,它允许用户做他们的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
下,除了更新usercontrol之外,我还想做一个单独的调用,这将保存数据库下的特定用户更改(我的IEmployeeRepository
负责所有)。
这就是为什么我需要找到一种方式,如何实现这种'正确'的方式。我肯定可以重新设计此控件的模板并重新绑定确定&取消按钮,但我不认为这是要走的路。
FINAL
ServiceLocator
做的工作。下面是代码:
_employeeRepository = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IEmployeeRepository>();
答
有ServiceLocator.Current.GetInstance
它可以为你提供任何依赖无处不在。
但要小心,因为依赖关系非常隐蔽。
你可以在你的课程的任何地方访问'_employeeRepository'。或者你想要注入一个依赖项,但不是通过构造函数?那么你可以去接受二传手注射。使用属性上的[Dependency]来解析时注入它。 – Haukinger
我所做的是,我有一个我的数据表单的命令提供程序(使用预定义的构造函数,我无法更改),当点击提交按钮时,我需要将参数传递给特定的控件(我需要调用命令) –
您可以将按钮绑定到特定控件上的命令吗?我想我不完全明白你想要做什么,这里有什么问题。你能把更多的代码放在原始问题中吗? – Haukinger