С Unity, можно вводить различные элементы управления/интерфейсы через конструктор, как следующие:контейнера доступа за пределы конструктора
private readonly IEmployeeRepository _employeeRepository;
public EmployeeView_EmployeeListViewModel(IEmployeeRepository employeeRepository)
{
_employeeRepository = employeeRepository;
}
Однако, мне нужно получить доступ к определенному элементу управления (скажем, один используется в качестве примера) за пределы конструктора (я не могу редактировать конструктор).
Есть ли способ, как это сделать?
EDIT подробнее - У меня есть DataForm, что позволяет пользователям выполнять простые операции CRUD на их DataGrid (просто изменить форму). Этот элемент управления находится от 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
заботится обо всех).
Вот почему мне нужно найти способ, как достичь этого «правильного» пути. Я могу с уверенностью переустановить шаблон этого элемента управления и перестроить OK & Отменить кнопки, но я не верю, что это путь.
FINAL
ServiceLocator
сделал свою работу. Вот код:
_employeeRepository = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IEmployeeRepository>();
Вы можете получить доступ к '_employeeRepository' в любом месте своего класса. Или вы хотите, чтобы была введена зависимость, но не через конструктор? Тогда вы можете пойти на инъекцию сеттера. Используйте '[Dependency]' для свойства, чтобы оно было введено при разрешении. – Haukinger
То, что я делаю, это то, что у меня есть поставщик команд для моей Формы данных (с предопределенным конструктором, который я не могу изменить), и когда нажата кнопка «Отправить», мне нужно передать параметры конкретному элементу управления (мне нужно вызвать команду) –
Можете ли вы привязать кнопку к команде на конкретном элементе управления? Я думаю, что я не совсем понимаю, что вы пытаетесь сделать, и в чем проблема. Можете ли вы добавить больше кода в исходный вопрос? – Haukinger