Я прочитал, что мне нужно реализовать IDisposable
, если мой класс имеет переменную-член, которая сама является IDisposable. Ну, я реализую интерфейс IDisposable
, потому что мой класс содержит объект базы данных (член класса db
ниже), который сам является IDisposable:
public class CommissionModel : IDisposable
{
protected PetaPoco.Database db;
public CommissionModel()
{
string connectionString = "Server=localhost;...";
// The line below may throw an exception (!!!)
db = new PetaPoco.Database(connectionString, "mysql");
}
// Automatically close database connection
public void Dispose()
{
if (db != null)
db.Dispose();
db = null;
}
public void InsertRecord(Record somerecord)
{
// ...
db.Insert(somerecord);
}
Проблема в том, что инстанцирование члена db
при некоторых обстоятельствах может завершиться неудачей.
Что делать, если в конструкторе возникает исключение и объект базы данных не создается? Должен ли я перебросить исключение или, возможно, проверить, что db != null
в методе InsertRecord?