Учитывая этот фрагмент кода
public abstract class Foo
{
private static SqlConnection _sqlConnection;
protected SqlConnection GetOpenConnection()
{
if (_sqlConnection == null)
{
_sqlConnection = new SqlConnection("connection string");
}
return _sqlConnection;
}
protected abstract void Execute();
}
public class FooImpl : Foo
{
protected override void Execute()
{
var myConn = GetOpenConnection();
var dog = myConn.Query<dynamic>("select 'dog' Animal");
var first = dog.First();
string animalType = first.Animal;
// more stuff here
}
}
Как бы вы обернули соединение в профилированное соединение, если у вас нет доступа к процессу создания соединения? Переписать код в суперклассе и завернуть туда? Это потребует изменения сотен классов, наследуемых от базы. Я бы предпочел способ изменить базовый класс с минимальными изменениями, необходимыми для надстройки.
Спасибо, Стивен