Как передать соединение mvc-mini-profiler в базовый класс из MVC3 - PullRequest
2 голосов
/ 09 августа 2011

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

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

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

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

1 Ответ

3 голосов
/ 09 августа 2011

Через некоторое время после проб и ошибок я скомпрометировал и добавил ссылку на 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)), так и для службы WPF / Windows

...