C# 使用mini profiler和MVC3-在单独的dll中分析来自模型类的连接
我有一个MVC3项目,其中一个模型作为单独的类库项目构建,以便在其他应用程序中重用 我正在使用mini profiler,希望找到一种方法来分析从这个类库进行的数据库连接和查询,并将结果返回给MVC3应用程序 目前,在我的MVC3应用程序中,现有机型使用以下帮助器类获取连接: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
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);
};
这里有一个相当大的错误,满脸通红——谢谢你修改这个问题。活动是一种有趣的方式,我会玩一个游戏,看看我能不能让它发挥作用。