Я сейчас немного экспериментирую с использованием Autofac-1.4.5.676, autofac contrib и Castle DynamicProxy2. Цель состоит в том, чтобы создать крупномасштабный профилировщик, который может перехватывать вызовы определенных методов определенного интерфейса.
Проблема: у меня все работает отлично, кроме селективной части. Я могу ошибаться, но я думаю, что мне нужно объединить мой перехватчик с реализацией IProxyGenerationHook, но я не могу понять, как это сделать.
Мой код выглядит примерно так:
Интерфейс, который должен быть перехвачен и профилирован (обратите внимание, что меня интересует только профилирование Update () метод)
public interface ISomeSystemToMonitor
{
void Update(); // this is the one I want to profile
void SomeOtherMethodWeDontCareAboutProfiling();
}
Теперь, когда я регистрирую свои системы в контейнере, я делаю следующее:
// Register interceptor gubbins
builder.RegisterModule(new FlexibleInterceptionModule());
builder.Register<PerformanceInterceptor>();
// Register systems (just one in this example)
builder.Register<AudioSystem>()
.As<ISomeSystemToMonitor>)
.InterceptedBy(typeof(PerformanceInterceptor));
Все экземпляры ISomeSystemToMonitor, извлеченные из контейнера, перехватываются и профилируются по желанию, за исключением того факта, что он будет перехватывать все свои методы, а не только метод Update.
Теперь, как я могу расширить это, чтобы исключить все методы, кроме Update ()? Как я уже сказал, я не понимаю, как я должен сообщить контейнеру, что «для ProfileInterceptor, используйте эту реализацию IProxyHookGenerator».
Вся помощь оценена, ура! Кроме того, обратите внимание, что я не могу перейти на autofac2.x прямо сейчас; Я застрял с 1.