Работа с исключениями в конструкторе при реализации IDisposable

Я прочитал, что мне нужно реализовать 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?

8
задан ezpresso 15 December 2011 в 21:17
поделиться