Ну, я работал с чем-то подобным в эти дни. Я использовал Unity Container
, чтобы сделать свой DI. Код не является полностью полным и не оптимизирован вообще.
Если вы видели или использовали ASP. NET API, я попытался воспроизвести ту же операцию в приложении windows форм.
Я использовал метод расширения, как показано ниже, чтобы добавить все свои формы в контейнер Unity.
public static void AddForms(this IUnityContainer container, Assembly assembly = null)
{
if (assembly == null) assembly = Assembly.GetCallingAssembly();
foreach (var form in assembly.GetTypes().Where(x => typeof(Form).IsAssignableFrom(x)))
{
var initForm = form.GetCustomAttribute<InitialFormAttribute>();
if (initForm != null)
{
container.RegisterType(typeof(Form), form, "InitialForm", new TransientLifetimeManager());
}
else
{
container.RegisterType(form, new TransientLifetimeManager());
}
}
}
И использовать некоторое кодирование для реализации запуска, как в ASP. NET. При запуске я добавил EF Core DbContext в контейнер, так же, как я добавил все, что мне нужно, чтобы Unity Container мог просто создавать экземпляры форм для меня, и у меня всегда есть доступ к моим службам в формах.
Если вы хотите увидеть полный код, оставьте комментарий ниже.