Я действительно новичок в концепции внедрения зависимостей.Так что, возможно, я сделал это неправильно, я не уверен.Позвольте мне описать проблему.
У меня есть приложение Windows Forms.В основной форме я назвал Entity Framework db context
DBContext context = new DBContext();
У меня есть несколько форм и бизнес-логика для каждой сущности.Я пытаюсь сделать следующее: пользователь открывает форму, в ней есть сетка данных для отображения данных.Его источником данных является контекст.
Пользователь вводит некоторые данные, затем, если пользователь нажимает кнопку «ОК», я вызываю context.saveChanges();
Если пользователь нажимает кнопку «Отмена», я не вызываю и ожидаю данныхне сохраняется.
Вот соответствующий код.В mainform я вызываю мою форму и вставляю контекст:
dataForm form = new dataForm(context);
form.ShowDialog();
В dataForm пользователь видит данные, грубые.Я внедряю тот же контекст, который идет от mainform к логическому классу:
DBContext context;
dataLogic logic;
public dataForm(DBContext context)
{
this.context = context;
logic = new dataLogic(context);
}
private void okButton_Click(object sender, EventArgs e)
{
context.SaveChanges();
DialogResult = DialogResult.OK;
}
private void cancelButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
Проблема здесь в том, что я использую внедрение зависимостей (контекст в mainform -> inject to dataform -> inject to logic) и Iиспользуйте контекст в качестве источника данных для просмотра данных, даже если я не вызываю context.SaveChanges();
, данные были сохранены в контекст.Таким образом, пользователь нажимает кнопку отмены и по-прежнему видит измененные данные.Если это не перезапустить приложение.
Чтобы устранить проблему, я могу создать новые экземпляры контекста в логических классах или формах данных, но это решение будет сопровождаться проблемами, которые решает DI.
Итак, как следуетЯ реализую свой код?Я сделал DI не правильно?