Общее правило заключается в том, что ваш класс должен реализовывать IDisposable
, если он напрямую содержит неуправляемые ресурсы или содержит ссылку на другой объект IDisposable
. Если ваш класс создает IDataReader
в одном методе, но никогда не содержит эту ссылку, тогда вашему классу не нужно будет реализовывать IDisposable
в соответствии с правилом (если только это не случится так, чтобы IDisposable
оставалось в стороне от IDataReader
, созданного в этом один метод).
Реальный вопрос, который вам нужно задать себе, заключается в том, должен ли ваш класс действительно удерживать этот IDataReader
даже после того, как он доставил его вызывающей стороне. Лично я считаю, что это плохой дизайн, потому что он размывает линию собственности. Кому на самом деле принадлежит IDisposable
в этом случае? Кто несет ответственность за его жизнь? Взять, к примеру, IDbCommand
классы. Они создают IDataReader
экземпляры и возвращают их вызывающим, но освобождают себя от владения. Это делает API чистым, и ответственность за управление временем жизни в этом случае однозначна.
Независимо от проблемы собственности, ваша конкретная ситуация требует внедрения IDisposable; не потому, что ваш класс создает и возвращает экземпляр IDataReader
, а потому, что он звучит так, как будто содержит объект IDbConnection
.