Закрытие соединения является частью метода удаления, встроенного в класс, однако это не особо чистый метод, и он довольно похож с точки зрения другой конечной точки как не отвечающий клиент.
Вы можете правильно распоряжаться контекстом БД из любого места, если у вас есть ссылка на объект, необходимый для выполнения удаления. Есть несколько способов сделать это.
Прежде всего, это просто присвоить ссылку любому объекту, который вы ожидаете выполнить операцию закрытия. Вам нужно будет создать ситуацию, когда и контекст БД, и объект, который вы ожидаете выполнить, существуют вместе в области видимости, но это то, что вы обрабатываете где-то при инициализации.
Подсказка, подсказка, это именно тот тип вещей, для которого вы, возможно, захотите создать конструктор для любого типа, который будет управлять вашим контекстом.
Для более сложного сценария, например, если вы не уверены, откуда будет обрабатываться контекст БД, и если вы хотите сделать его гораздо более гибким и универсальным, необходимо выполнить некоторую магию делегата, которая в все будет похоже на функциональное программирование.
Вам потребуется создать серию делегатов для обработки нескольких заданий, число которых будет зависеть от того, насколько надежны ваши параметры для работы.
Во-первых, у вас должен быть метод в контексте БД, который фактически обрабатывает удаление, которое затем вы можете передать другим объектам в качестве обработчика, который может быть вызван вне области действия для фактического закрытия соединения.
В зависимости от обстоятельств, при которых вы ожидаете закрытие соединения из произвольных областей, вы можете также захотеть второй метод, который вызывается всякий раз, когда вы назначаете делегата, который закрывает соединение. Это будет хранить делегатов, которые могут закрыть соединение, и всякий раз, когда соединение пытается закрыться, сначала все делегаты удаляются из их соответствующих списков вызовов, гарантируя, что в более поздних случаях никакие обработчики не будут пытаться указывать на объекты, которые были удалены.
Однако в этот момент вы начинаете углубляться в территорию Threading, и, если не важна возможность удаления и возобновления всего контекста базы данных, вы, скорее всего, можете использовать ссылку в ожидаемом типе или обработчик. ожидаемый тип является произвольным до времени выполнения.