私は C#.Net を使用していますが、関連する例はすべて受け入れられます。
ListFrm と DetailFrm の 2 つの winform があります。ユーザーが DetailFrm のボタンをクリックするたびに、新しい ListFrm がポップアップして、ユーザーが選択した項目を変更できるようになります。
詳細フレーム.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 の参照ボタンを 2 回クリックしたときに、既に破棄されているため、ListFrm が読み込まれないことです。
依存性注入でこれを行う方法は? ItemRepository 依存関係を必要とする新しい ListFrm を作成できないため、ListFrmFactory を作成できません。
また、DIContainer はサービス ロケータになるため、あちこちに渡したくありません。
依存性注入なしで実行した場合は、new ListFrm()
必要なときに呼び出すだけです。
ありがとう !