public void ReflectShouldHappenOnGenericBaseClass() { PolicyList policies = new PolicyList(); MethodBase method = typeof(Generic <>).GetMethod("DoSomething"); InterceptionReflector.Reflect <Generic <int> >(policies, new StubObjectFactory()); IVirtualInterceptionPolicy policy = policies.Get <IVirtualInterceptionPolicy>(typeof(Generic <>)); Assert.Equal(1, policy.Count); Assert.Equal(1, policy[method].Count); Assert.IsType <RecordingHandler>(policy[method][0]); }
public void InterceptionIsInherited() { PolicyList policies = new PolicyList(); MethodBase method = typeof(DerivedOneMethod).GetMethod("InterceptedMethod"); InterceptionReflector.Reflect <DerivedOneMethod>(policies, new StubObjectFactory()); IVirtualInterceptionPolicy policy = policies.Get <IVirtualInterceptionPolicy>(typeof(DerivedOneMethod)); Assert.Equal(1, policy.Count); Assert.Equal(1, policy[method].Count); Assert.IsType <RecordingHandler>(policy[method][0]); }
public void TwoAttributesOnOneMethod() { PolicyList policies = new PolicyList(); MethodBase method = typeof(OneMethodTwoAttributes).GetMethod("InterceptedMethod"); InterceptionReflector.Reflect <OneMethodTwoAttributes>(policies, new StubObjectFactory()); IVirtualInterceptionPolicy policy = policies.Get <IVirtualInterceptionPolicy>(typeof(OneMethodTwoAttributes)); Assert.Equal(1, policy.Count); Assert.Equal(2, policy[method].Count); Assert.IsType <RecordingHandler>(policy[method][0]); Assert.IsType <RecordingHandler>(policy[method][1]); }
public void CanAddHandlersInInheritedClass() { PolicyList policies = new PolicyList(); MethodBase method = typeof(DerivedWithAddedIntercepts).GetMethod("InterceptedMethod"); InterceptionReflector.Reflect <DerivedWithAddedIntercepts>(policies, new StubObjectFactory()); IVirtualInterceptionPolicy policy = policies.Get <IVirtualInterceptionPolicy>(typeof(DerivedWithAddedIntercepts)); Assert.Equal(1, policy.Count); Assert.Equal(2, policy[method].Count); Assert.IsType <RecordingHandler>(policy[method][0]); Assert.IsType <RecordingHandler>(policy[method][1]); }
public void TwoInterceptedMethods() { PolicyList policies = new PolicyList(); MethodBase method1 = typeof(TwoMethods).GetMethod("InterceptedMethod1"); MethodBase method2 = typeof(TwoMethods).GetMethod("InterceptedMethod2"); InterceptionReflector.Reflect <TwoMethods>(policies, new StubObjectFactory()); IVirtualInterceptionPolicy policy = policies.Get <IVirtualInterceptionPolicy>(typeof(TwoMethods)); Assert.Equal(2, policy.Count); Assert.Equal(1, policy[method1].Count); Assert.IsType <RecordingHandler>(policy[method1][0]); Assert.Equal(1, policy[method2].Count); Assert.IsType <RecordingHandler>(policy[method2][0]); }
public override object BuildUp(IBuilderContext context, object buildKey, object existing) { ICreationPolicy creationPolicy = context.Policies.Get <ICreationPolicy>(buildKey); IVirtualInterceptionPolicy interceptionPolicy = context.Policies.Get <IVirtualInterceptionPolicy>(buildKey); Type typeToBuild; if (creationPolicy != null && creationPolicy.SupportsReflection && interceptionPolicy != null && TryGetTypeFromBuildKey(buildKey, out typeToBuild)) { ConstructorInfo ctor = creationPolicy.GetConstructor(context, buildKey); object[] ctorParams = creationPolicy.GetParameters(context, ctor); buildKey = InterceptClass(context, typeToBuild, interceptionPolicy, ctorParams); } return(base.BuildUp(context, buildKey, existing)); }