Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix async problem calling await before Proceed - Breaking Change #428

Closed
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ public void Finalize_method_is_proxied_even_though_its_not_the_best_idea_ever()

public class ResultModifierInterceptor : StandardInterceptor
{
protected override void PostProceed(IInvocation invocation)
protected override void PostProceed(IInvocation invocation, InvocationDelegate proceed)
{
object returnValue = invocation.ReturnValue;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ public ChangeProxyTargetInterceptor(object target)
this.target = target;
}

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
var targetAccessor = invocation.Proxy as IProxyTargetAccessor;
Assert.IsNotNull(targetAccessor);
targetAccessor.DynProxySetTarget(target);
invocation.Proceed();
proceed(invocation);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public LazyInterceptorV1(Lazy<T> lazyTarget)

private Lazy<T> LazyTarget { get; }

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
var target = invocation.InvocationTarget as T;
if (target == null)
Expand All @@ -37,7 +37,7 @@ public void Intercept(IInvocation invocation)
((IProxyTargetAccessor)invocation.Proxy).DynProxySetTarget(LazyTarget.Value);
}

invocation.Proceed();
proceed(invocation);
}
}

Expand All @@ -51,7 +51,7 @@ public LazyInterceptorV2(Lazy<T> lazyTarget)

private Lazy<T> LazyTarget { get; }

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
var target = invocation.InvocationTarget as T;
if (target == null)
Expand All @@ -62,7 +62,7 @@ public void Intercept(IInvocation invocation)
#pragma warning restore CS0618 // obsolete
}

invocation.Proceed();
proceed(invocation);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ public sealed class Interceptor : IInterceptor
{
public Type ReceivedTargetType { get; private set; }

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
ReceivedTargetType = invocation.TargetType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ public class AddTwoInterceptor : IInterceptor
{
#region IInterceptor Members

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
invocation.Proceed();
proceed(invocation);
var ret = (int) invocation.ReturnValue;
ret += 2;
invocation.ReturnValue = ret;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ public class AssertCanChangeTargetInterceptor : IInterceptor
{
#region IInterceptor Members

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
Assert.IsInstanceOf(typeof (IChangeProxyTarget), invocation);
invocation.Proceed();
proceed(invocation);
}

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ namespace Castle.DynamicProxy.Tests.Interceptors

public class AssertCannotChangeTargetInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
Assert.IsNotInstanceOf<IChangeProxyTarget>(invocation);
invocation.Proceed();
proceed(invocation);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ public int Count

#region IInterceptor Members

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
count++;
invocation.Proceed();
proceed(invocation);
}

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public ChangeTargetInterceptor(object target)
this.target = target;
}

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
IChangeProxyTarget changeTarget = (IChangeProxyTarget) invocation;
changeTarget.ChangeInvocationTarget(target);
invocation.Proceed();
proceed(invocation);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace Castle.DynamicProxy.Tests.Interceptors
{
public class DoNothingInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ public IInvocation Invocation
get { return invocation; }
}

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
this.invocation = invocation;
var concreteMethod = invocation.GetConcreteMethod();

if (invocation.MethodInvocationTarget != null)
{
invocation.Proceed();
proceed(invocation);
}
else if (concreteMethod.ReturnType.GetTypeInfo().IsValueType && !concreteMethod.ReturnType.Equals(typeof(void)))
// ensure valid return value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,18 @@ public class LogInvocationInterceptor : StandardInterceptor

public bool Proceed = true;

protected override void PreProceed(IInvocation invocation)
protected override void PreProceed(IInvocation invocation, InvocationDelegate proceed)
{
invocations.Add(invocation.Method.Name);

sb.Append(String.Format("{0} ", invocation.Method.Name));
}

protected override void PerformProceed (IInvocation invocation)
protected override void PerformProceed (IInvocation invocation, InvocationDelegate proceed)
{
if (Proceed)
{
base.PerformProceed (invocation);
base.PerformProceed (invocation, proceed);
}
else if (invocation.Method.ReturnType.GetTypeInfo().IsValueType && invocation.Method.ReturnType != typeof (void))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ public ProceedNTimesInterceptor(int retries)
this.retries = retries;
}

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
for (var i = 0; i < retries; i++)
{
try
{
invocation.Proceed();
proceed(invocation);
}
catch
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ public ProceedOnTypeInterceptor(Type type)
this.type = type;
}

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
type = typeof(IBarFoo);
if (invocation.Method.DeclaringType != type)
{
invocation.Proceed();
proceed(invocation);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace Castle.DynamicProxy.Tests.Interceptors

public class RequiredParamInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
ParameterInfo[] parameters = invocation.Method.GetParameters();

Expand All @@ -42,7 +42,7 @@ public void Intercept(IInvocation invocation)
}
}

invocation.Proceed();
proceed(invocation);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public SetArgumentValueInterceptor(int index, object value)
this.value = value;
}

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
invocation.SetArgumentValue(index, value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public SetReturnValueInterceptor(object value)
}


public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
invocation.ReturnValue = value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace Castle.DynamicProxy.Tests.Interceptors
{
public class ThrowingInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
throw new ThrowingInterceptorException("Because I feel like it");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public WithCallbackInterceptor(InterceptorCallback interceptorCallback)
callback = interceptorCallback;
}

public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
callback(invocation);
callback(invocation, proceed);
}

public delegate void InterceptorCallback(IInvocation invocation);
public delegate void InterceptorCallback(IInvocation invocation, InvocationDelegate proceed);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ public virtual int IntThrow()

public class SwallowExceptionInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
try
{
invocation.Proceed();
proceed(invocation);
}
catch (Exception)
{
Expand All @@ -107,9 +107,9 @@ public void Intercept(IInvocation invocation)

public class ReturnNullValueInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
public void Intercept(IInvocation invocation, InvocationDelegate proceed)
{
invocation.Proceed(); // If this throws, ReturnValue will remain null
proceed(invocation); // If this throws, ReturnValue will remain null
invocation.ReturnValue = null;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,16 +101,16 @@ public void InterfaceProxyWithTargetInterface_MethodInvocationTarget_should_be_u
var proxy = generator.CreateInterfaceProxyWithTargetInterface(
typeof(IService),
target1,
new WithCallbackInterceptor(i =>
new WithCallbackInterceptor((i, p) =>
{
invocationTarget1 = i.MethodInvocationTarget;
i.Proceed();
p(i);
}),
new ChangeTargetInterceptor(target2),
new WithCallbackInterceptor(i =>
new WithCallbackInterceptor((i, p) =>
{
invocationTarget2 = i.MethodInvocationTarget;
i.Proceed();
p(i);
})) as IService;

proxy.Sum(2, 2);
Expand Down
4 changes: 2 additions & 2 deletions src/Castle.Core.Tests/DynamicProxy.Tests/MixinTestCase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ private class AssertInvocationInterceptor : StandardInterceptor
public object proxy;
public object mixin;

protected override void PreProceed(IInvocation invocation)
protected override void PreProceed(IInvocation invocation, InvocationDelegate proceed)
{
Invoked = true;
mixin = invocation.InvocationTarget;
proxy = invocation.Proxy;
base.PreProceed(invocation);
base.PreProceed(invocation, proceed);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void Same_Interface_on_target_and_mixin_should_forward_to_target()
[Test]
public void Same_Interface_on_proxy_withouth_target_and_mixin_should_forward_to_null_target()
{
var interceptor = new WithCallbackInterceptor(i =>
var interceptor = new WithCallbackInterceptor((i, p) =>
{
Assert.IsNull(i.InvocationTarget);
i.ReturnValue = 0;
Expand All @@ -63,7 +63,7 @@ public void Same_Interface_on_target_of_proxy_with_target_interface_and_mixin_sh
{
var target = new ServiceImpl();
var mixin = new ServiceImpl();
IInterceptor interceptor = new WithCallbackInterceptor(i=>
IInterceptor interceptor = new WithCallbackInterceptor((i, p)=>
{
Assert.AreSame(target,i.InvocationTarget);
i.ReturnValue = 0;
Expand Down
10 changes: 5 additions & 5 deletions src/Castle.Core.Tests/DynamicProxy.Tests/OutRefParamsTestCase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ public class ExceptionCatchInterceptor : StandardInterceptor
{
public Exception Exception { get; set; }

protected override void PerformProceed(IInvocation invocation)
protected override void PerformProceed(IInvocation invocation, InvocationDelegate proceed)
{
try
{
base.PerformProceed(invocation);
base.PerformProceed(invocation, proceed);
}
catch (Exception e)
{
Expand Down Expand Up @@ -97,7 +97,7 @@ public void CanAffectValueOfOutParameter()
{
int i;
var interceptor =
new WithCallbackInterceptor(delegate(IInvocation invocation) { invocation.Arguments[0] = 5; });
new WithCallbackInterceptor(delegate(IInvocation invocation, InvocationDelegate proceed) { invocation.Arguments[0] = 5; });
var proxy = (IWithRefOut)generator.CreateInterfaceProxyWithoutTarget(typeof(IWithRefOut), interceptor);
proxy.Do(out i);
Assert.AreEqual(5, i);
Expand All @@ -118,7 +118,7 @@ public void CanCreateComplexOutRefProxyOnClass()
var i = 3;
var s1 = "2";
string s2;
var interceptor = new WithCallbackInterceptor(delegate(IInvocation invocation)
var interceptor = new WithCallbackInterceptor(delegate(IInvocation invocation, InvocationDelegate proceed)
{
invocation.Arguments[0] = 5;
invocation.Arguments[1] = "aaa";
Expand All @@ -144,7 +144,7 @@ public void CanCreateProxyWithRefParam()
{
var i = 3;
var interceptor =
new WithCallbackInterceptor(delegate(IInvocation invocation) { invocation.Arguments[0] = 5; });
new WithCallbackInterceptor(delegate(IInvocation invocation, InvocationDelegate proceed) { invocation.Arguments[0] = 5; });
var proxy = (IWithRefOut)generator.CreateInterfaceProxyWithoutTarget(typeof(IWithRefOut), interceptor);
proxy.Did(ref i);
Assert.AreEqual(5, i);
Expand Down
Loading