По сути, было бы лучше избегать использования статических / одноэлементных паттернов (как всегда, лучше избегать их использования). Вы можете написать репозиторий с этим битмапом, загруженным при создании, и затем сохранить его на каком-то более высоком уровне классов, которые вы используете. Но иногда это хороший способ проверить синглтон :) Вот базовый c потокобезопасный шаблон синглтона (с растровым изображением внутри):
class Singleton
{
public Bitmap Image { get; set; }
private Singleton() { }
private static Singleton _instance;
private static readonly object _lock = new object();
public static Singleton GetInstance(Bitmap value = null)
{
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
{
_instance = new Singleton();
if (value != null)
{
_instance.Image = value;
}
}
}
}
return _instance;
}
}
(взято с одной из лучших страниц в разработке программного обеспечения) фрагменты: https://refactoring.guru/design-patterns/singleton/csharp/example#example -1 )
Тогда ваша первая загрузка будет:
var singleton = Singleton.GetInstance(Accord.Imaging.Image.FromFile(@"D:\img.png"));
И каждая следующая:
var image = Singleton.GetInstance().Image;