Пример #1
0
            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]);
            }
Пример #2
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]);
            }
Пример #3
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]);
            }
Пример #4
0
            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]);
            }
Пример #5
0
            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));
        }