我有一個城堡攔截器,我試圖通過屬性來應用。當我在類級應用我的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
}
}
感謝,
安迪
這讓我傷心。我對AOP相當陌生,但它似乎像方法級別的攔截器是一個很好的功能。謝謝您的幫助! – Andy
只需要注意一下,使用PostSharp,你可以更容易地做你正在嘗試的東西:) –