У меня есть перехватчик замка, который я пытаюсь применить через атрибуты. Он отлично работает, когда я применяю атрибут Interceptor на уровне класса, но он не работает вообще, когда я применяю метод на уровне метода. Что я делаю не так? Я не хочу перехватывать каждый метод в классе, но вместо этого отмечать определенные методы с помощью атрибута [Перехватчик]. Я пробовал маркировать свои методы как виртуальные, но это все еще не работает. Вот мой код:Замок Виндзорский перехватчик не работает с атрибутом уровня метода
Это работает и все методы перехватываются:
[Interceptor(typeof(CacheInterceptor))]
public class Foo : IFoo
{
public int SomeMethod() { }
}
Это не работает (атрибут на уровне метода):
public class Foo : IFoo
{
[Interceptor(typeof(CacheInterceptor))]
public int SomeMethod() { }
}
Установщик:
public class CacheInterceptorInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Component.For<CacheInterceptor>().LifeStyle.Singleton);
container.Register(Component
.For<ICacheProvider>()
.LifeStyle.Singleton
.ImplementedBy<CacheProvider>());
}
}
Перехватчик:
public class CacheInterceptor : IInterceptor
{
private readonly ICacheProvider _cacheProvider;
public CacheInterceptor(ICacheProvider cacheProvider)
{
_cacheProvider = cacheProvider;
}
public void Intercept(IInvocation invocation)
{
// do interception stuff
}
}
Спасибо,
Энди
Это делает меня грустным. Я довольно новичок в AOP, но похоже, что перехватчики на уровне методов будут хорошей возможностью предложить. Спасибо за помощь! – Andy
Просто обратите внимание, что с PostSharp гораздо проще делать то, что вы пытаетесь :) –