我真的是依赖注入概念的新手。所以也许我弄错了,我不确定。让我描述一下这个问题。
我有一个Windows窗体应用程序。在主要形式中,我称实体框架数据库上下文
DBContext context = new DBContext();
对于每个实体,我都有几种形式和业务逻辑。我想做的是:用户打开一个窗体,窗体中有一个datagridview来显示数据。它的数据源是上下文。
用户输入了一些数据,然后,如果用户单击“确定”按钮,我会呼叫context.saveChanges();
如果用户单击“取消”按钮,我不会打电话,并且我希望不会保存数据。
这是相关的代码。在主表单中,我调用表单并注入上下文:
dataForm form = new dataForm(context);
form.ShowDialog();
在dataForm中,用户看到的是数据。我注入了从主体形式到逻辑类的相同上下文:
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;
}
这里的问题是,因为我使用依赖项注入(在主形式中为上下文->注入为数据形式->注入为逻辑),并且即使我不调用context.SaveChanges();
,我也将上下文用作datagridview的数据源数据已保存到上下文。因此,用户单击“取消”,仍然看到修改后的数据。除非重新启动应用程序。
要解决此问题,我可以在逻辑类或数据形式中创建新的上下文实例,但是此解决方案将附带DI解决的问题。
那么,我应该如何实现我的代码?我是否使DI不正确?