singe31 правильный. Я сделал это раньше, чтобы выполнить эту точную вещь.
C#
public class DataAccessObject
{
private static DataAccessObject _dataObject = null;
private static readonly object _lock = new object();
public static DataAccessObject dataObj {
get {
lock (_lock) {
if (_dataObject == null) {
_dataObject = new DataAccessObject();
}
return _dataObject;
}
}
}
private DataAccessObject()
{
//populate your _dataObject in here
}
}
Затем в коде вы можете сделать экземпляр вашей DataAccessObject
равен государственной собственности private DataAccessObject _dataObject = DataAccessObject.dataObj
Это ударит свойство и тянуть в памяти только для чтения значение и присвоить его к вашей локальной переменной. Если он уже существует, он просто извлекает то, что находится в памяти, иначе он будет создавать экземпляр нового экземпляра и возвращать его, а следующий тест получит в памяти один.
_lock существует для потоков, если вы хотите 2 одновременно. Он заблокирует доступ к одному и заставит другого ждать, пока он не будет закончен перед запуском. Таким образом, вы только создаете экземпляр один раз вместо того, чтобы рисковать коррупцией, делая одно и перезаписывая его сразу же.
Имейте класс, реализующий шаблон проектирования singleton для подключения к вашей базе данных – singe3