Например, мне нужно хранить синглтон провайдера базы данных и ряд глобальных переменных. Я пока вижу два варианта.
1) Хранить в инстансе главной формы, которую получать примерно таким образом:
Form1 GetMainForm()
{
foreach (Form form in Application.OpenForms)
if (form is MainForm)
return (MainForm)form;
return null;
}
2)
Поднять встроенный в Microsoft.Extensions.Hosting DI и каждый раз тянуться:
using (var pg = Program.ServiceProvider.GetRequiredService<PostgresProvider>())
pg.DoSomething();
Я пока склоняюсь ко второму варианту, т.к. использую его в WPF. Но может быть для WF-приложений есть другая устоявшаяся практика?