【发布时间】:2014-02-04 13:31:01
【问题描述】:
我有一个城堡拦截器,我正试图通过属性应用它。当我在类级别应用我的 Interceptor 属性时它工作得很好,但是当我在方法级别应用时它根本不起作用。我究竟做错了什么?我不想拦截类上的每个方法,而是使用 [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
}
}
谢谢,
安迪
【问题讨论】:
标签: c# castle-windsor aop castle-dynamicproxy