Я полагаю, вы используете приложение WinForms или WPF, которое вы называете приложением для рабочего стола.Если это так, вы, безусловно, можете использовать один из множества контейнеров IoC для хранения объектов в глобальном масштабе, а затем обращаться к ним, когда вам это нужно.Тем не менее, я думаю, что это не стоит усилий для простых сценариев.
Простое решение состоит в том, чтобы использовать статическую фабрику, которая может создать объект, когда вам это нужно, или сохранить его как статический объект, чтобы ондоступно по всему приложению при условии, что его состояние остается неизменнымВы можете добавить универсальный метод для возврата объекта типа T
или добавить специальный метод для создания объекта, который может потребовать некоторой логики.
public static class ObjectFactory
{
public static T GetObject<T>() where T : new()
{
return new T();
}
public static User GetUserObject(param1, param2)
{
// some logic
....
return new User();
}
}
Вы также можете изменить приведенный выше код, чтобысохраните его в словаре, если вам не нужно каждый раз создавать объект.Пожалуйста, убедитесь, что вы не переполняете словарь слишком большим количеством объектов, хранящихся в памяти, и, возможно, добавляете метод удаления объекта, если он вам не нужен.
public static class ObjectFactory
{
private static Dictionary<string, object> collection = new Dictionary<string, object>();
public static T GetObject<T>() where T : new()
{
string key = typeof(T).ToString();
if (collection.ContainsKey(typeof(T).ToString()))
return (T)collection[key];
var instance = new T();
collection.Add(key, instance);
return instance;
}
}
ПроблемаПри использовании инфраструктуры IoC для приложений для настольных компьютеров они не имеют аналогичного времени жизни приложения, как веб-приложение.После запуска приложения сценарий типа «запрос / ответ» отсутствует.Вы бы показывали основную форму, которая, вероятно, может открыть другую форму и т. Д.
Если вы ищете более сложное решение, которое включает разрешение экземпляров форм вместе с зависимостями.Пожалуйста, посмотрите на ответ на возможный повторяющийся вопрос.
Надеюсь, это поможет.