C# 使用mini profiler和MVC3-在单独的dll中分析来自模型类的连接

C# 使用mini profiler和MVC3-在单独的dll中分析来自模型类的连接,c#,.net,asp.net-mvc-3,mvc-mini-profiler,C#,.net,Asp.net Mvc 3,Mvc Mini Profiler,我有一个MVC3项目,其中一个模型作为单独的类库项目构建,以便在其他应用程序中重用 我正在使用mini profiler,希望找到一种方法来分析从这个类库进行的数据库连接和查询,并将结果返回给MVC3应用程序 目前,在我的MVC3应用程序中,现有机型使用以下帮助器类获取连接: public class SqlConnectionHelper { public static DbConnection GetConnection() { var dbconn = ne

我有一个MVC3项目,其中一个模型作为单独的类库项目构建,以便在其他应用程序中重用

我正在使用mini profiler,希望找到一种方法来分析从这个类库进行的数据库连接和查询,并将结果返回给MVC3应用程序

目前,在我的MVC3应用程序中,现有机型使用以下帮助器类获取连接:

public class SqlConnectionHelper
{
    public static DbConnection GetConnection()
    {
        var dbconn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ToString());
        return new StackExchange.Profiling.Data.ProfiledDbConnection(dbconn, MiniProfiler.Current);
    }
}
但是,外部模型不能调用此函数,因为它对MVC3应用程序或mini profiler一无所知

我想到的一种方法是,在外部模型上有一个
IDbConnection
字段,然后在调用模型的任何方法之前,将
ProfiledDbConnection
对象传递到此字段。然后,模型将使用该字段中的任何内容进行数据库连接,我将在MVC3前端中获得一些分析结果


然而,我不确定这是否有效,或者这是否是最好的方法。我缺少的是更好的方法吗?

profileddb连接不整洁:它是迷你探查器。我们不提供任何可以接管所有连接创建的魔法;我唯一能建议的是,在您的库中公开一个可以从外部订阅的事件-因此库中的创建代码可能看起来有点像:

public static event SomeEventType ConnectionCreated;
static DbConnection CreateConnection() {
    var conn = ExistingDbCreationCode();
    var hadler = ConnectionCreated;
    if(handler != null) {
        var args = new SomeEventArgsType { Connection = conn };
        handler(typeof(YourType), args);
        conn = args.Connection;
    }
    return conn;
}
这可以让外部代码有机会做任何他们想做的事情,例如:

YourType.ConnectionCreated += (s,a) => {
    a.Connection = new StackExchange.Profiling.Data.ProfiledDbConnection(
        a.Connection, MiniProfiler.Current);
};

这里有一个相当大的错误,满脸通红——谢谢你修改这个问题。活动是一种有趣的方式,我会玩一个游戏,看看我能不能让它发挥作用。