我正在使用Ninject和AOP来做一些缓存。我有一个属性,我可以应用于我的存储库中的任何方法和BeforeInvoke它将返回我的缓存的对象,如果有一个和AfterInvoke创建一个缓存的对象。这一切都很好,但我不知道如何停止初始方法被调用,即如果有缓存对象的返回,而不是调用intycecepted方法。我的拦截器是在这里:AOP Ninject停止拦截被调用的方法
public class CacheInterceptor : SimpleInterceptor
{
protected override void BeforeInvoke(IInvocation invocation)
{
Type returnType = invocation.Request.Method.ReturnType;
string cacheKey = CacheKeyBuilder.GetCacheKey(invocation, serializer);
object cachedValue = cache.Get(cacheKey);
if (cachedValue == null)
{
invocation.Proceed();
}
else
{
object returnValue = serializer.Deserialize(returnType, cachedValue);
invocation.ReturnValue = returnValue;
returnedCachedResult = true;
}
}
}
即使在else语句我显然不是说叫被调用的方法“invocation.Proceed();”它仍然会调用它。我如何告诉ninject只需要返回invocation.ReturnValue?
你肯定你的拦截器被称为?你能在调试器中完成它吗? –
是拦截器被调用,我可以看到invocation.ReturnValue = returnValue;正在设定,但它也称为方法 – Joshy