I'm using C#.Net, but any relevant example is very much acceptable.
I have 2 winforms, let's say ListFrm and DetailFrm, in which everytime user click on a button in DetailFrm, a new ListFrm will popup so user can change the selected item.
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;
}
}
My problem is when I clicked on DetailFrm's browse button for the second time, ListFrm wouldn't load because it's already disposed of.
How to do this with dependency injection? I can't create a ListFrmFactory because it can't create a new ListFrm which requires an ItemRepository dependency.
I also don't want to pass around the DIContainer everywhere since it would be a service locator.
If it done without dependency injection, I would just call new ListFrm()
everytime I need it.
Thanks !