我正在使用 Ninject 和 AOP 进行一些缓存。我有一个属性,我可以将其应用于存储库中的任何方法,并且在 BeforeInvoke 上,如果有一个缓存对象,它将返回我的缓存对象,并且 AfterInvoke 创建一个缓存对象。这一切都很好,但我不知道如何停止调用初始方法,即如果有一个缓存的对象,则返回它而不是调用一个被拦截的方法。我的拦截器在这里:
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 ?