Я хочу записать некоторую информацию, программируя до и после того, как драйвер SQL Server действительно создает соединение (не получает соединение из пула соединений).
Я прочитал исходный код .net framework и обнаружил, что методы CreateNonPooledConnection и CreatePooledConnection класса DbConnectionFactory в System.Data.dll являются правильным местом для перехвата.
Я искал и нашел Котел.Интерцепция.Фоди.
Я определил пользовательский атрибут. Это может быть легко надето на метод моего класса и отлично работает.
[InterceptorOptions(AlwaysCreateNewInstance = true)]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class MyInterceptorAttribute : Attribute, IMethodInterceptor
{
public void OnEnter(Type declaringType, object instance, MethodBase methodbase, object[] values)
{
Console.WriteLine("OnEnter");
}
public bool OnException(Exception e)
{
Console.WriteLine(e.Message);
return false;
}
public void OnExit()
{
Console.WriteLine("OnExit");
}
}
[MyInterceptor]
internal void CreateConnection()
{
Console.WriteLine("Create connection.");
}
Вывод:
OnEnter
Создать соединение.
OnExit
Но как я могу поместить свой пользовательский атрибут в методы библиотеки классов .net framework или любым другим способом достижения моей цели?