Как я могу перехватить методы библиотеки классов .net Framework? [C #] - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу записать некоторую информацию, программируя до и после того, как драйвер 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 или любым другим способом достижения моей цели?

...