Как передать соединение mvc-mini-profiler с базовым классом из MVC3

asp.net-mvc-3 dapper mvc-mini-profiler

Вопрос

Учитывая этот фрагмент кода

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
    }
}

Как бы вы связали соединение в профилированном соединении, если у вас нет доступа к процессу создания соединения? Перепишите код в суперклассе и заверните его там? Это потребует изменения сотен классов, которые наследуются от базы. Я бы предпочел способ изменить базовый класс с минимальными изменениями, необходимыми для суперсовместимости.

Спасибо, Стивен

Принятый ответ

После нескольких проб и ошибок я скомпрометировал и добавил ссылку на MvcMiniProfiler в базовой библиотеке и немного изменил код подключения.

    protected DbConnection GetOpenConnection()
    {
        if (_connection == null)
        {
            _connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connection string "].ConnectionString);
            _connection.Open();
        }
        return MvcMiniProfiler.Data.ProfiledDbConnection.Get(_connection, MiniProfiler.Current); 
    }

    private static SqlConnection _connection;

Это работает как для хостинга в проекте MVC (для целей профилирования, где у нас нет этой возможности (QA / Prod Databases)) и службы WPF / Windows



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему