2016-02-29 97 views
0

对于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>(); 
+0

你可以在你的课程的任何地方访问'_employeeRepository'。或者你想要注入一个依赖项,但不是通过构造函数?那么你可以去接受二传手注射。使用属性上的[Dependency]来解析时注入它。 – Haukinger

+0

我所做的是,我有一个我的数据表单的命令提供程序(使用预定义的构造函数,我无法更改),当点击提交按钮时,我需要将参数传递给特定的控件(我需要调用命令) –

+0

您可以将按钮绑定到特定控件上的命令吗?我想我不完全明白你想要做什么,这里有什么问题。你能把更多的代码放在原始问题中吗? – Haukinger

回答

1

ServiceLocator.Current.GetInstance它可以为你提供任何依赖无处不在。

但要小心,因为依赖关系非常隐蔽。