我正在使用 C#.Net,但任何相关示例都可以接受。
我有 2 个 winform,比如说 ListFrm 和 DetailFrm,其中每次用户单击 DetailFrm 中的按钮时,都会弹出一个新的 ListFrm,以便用户可以更改所选项目。
DetailFrm.cs
public class DetailFrm
{
private readonly ListFrm _listFrm;
public DetailFrm(ListFrm listFrm)
{
_listFrm = listFrm;
}
private SelectButton OnClick(object sender, EventArgs e)
{
using(listFrm)
{
listFrm.ShowDialog();
// Do detail data filling here
}
}
}
ListFrm.cs
public class ListFrm
{
public Item SelectedItem { get; set; }
private readonly ListRepository _listRepository;
public ListFrm(ListRepository listRepository)
{
_listRepository = listRepository;
}
private ListFrm_Load(object sender, EventArgs e)
{
List<Item> listItem = _listRepository.GetAll();
// Do adding to datagridview
}
private dataGridViewSelect_CellDoubleClick(object sender, EventArgs e)
{
SelectedItem = // Selected in datagridview
this.Dispose;
}
}
我的问题是当我第二次单击 DetailFrm 的浏览按钮时,ListFrm 不会加载,因为它已经被处理掉了。
如何使用依赖注入来做到这一点?我无法创建 ListFrmFactory,因为它无法创建需要 ItemRepository 依赖项的新 ListFrm。
我也不想到处传递 DIContainer,因为它是一个服务定位器。
如果它在没有依赖注入的情况下完成,我会在new ListFrm()
每次需要时调用它。
谢谢 !