Возможно, вам следует опубликовать соответствующий код. Без этого я просто догадываюсь. Тем не менее, вот предположение:
Вы следуете неправильному шаблону здесь. Так как ваш класс поддерживает объекты, которые реализуют IDisposable, ваш класс должен реализовать сам IDisposable. Затем ваши вызывающие пользователи должны быть изменены, чтобы они вызывали метод Dispose вашего класса, когда они закончили с ним:
using System;
using System.Data.SqlClient;
public static class ConnectionManager
{
private static readonly SqlConnection _connection =
new SqlConnection("connectionString");
public static SqlConnection Connection { get { return _connection; } }
}
public class HoldsCommands : IDisposable
{
private readonly SqlCommand _commandOne = new SqlCommand("Command1");
private readonly SqlCommand _commandTwo = new SqlCommand("Command2");
public void DoSomethingWithAConnection()
{
}
public void Dispose()
{
if (_commandOne != null)
{
try
{
_commandOne.Dispose();
}
catch (Exception)
{
}
}
if (_commandTwo != null)
{
try
{
_commandTwo.Dispose();
}
catch (Exception)
{
}
}
}
}
Ваш абонент тогда позвонит вам так:
using (var commands = new HoldsCommands()) {
commands.DoSomethingWithAConnection();
}
Как говорит Люк Гирвин, вам, вероятно, не нужен статический класс ConnectionManager, если вы просто пытаетесь сэкономить на соединениях с базой данных. .NET справится с этим за вас.