Beispiel #1
0
        public void SelectConstructorWith2Parameters()
        {
            ConstructorInfo ctor = typeof(ClassWithConstructorParameters).GetMatchingConstructor(Types(typeof(int), typeof(string)));

            var policy = new SpecifiedConstructorSelectorPolicy(ctor,
                                                                new InjectionParameterValue[]
            {
                new InjectionParameter <int>(37),
                new InjectionParameter <string>("abc")
            });

            var builderContext = new BuilderContextMock(new NamedTypeBuildKey(typeof(ClassWithConstructorParameters)));

            SelectedConstructor selectedCtor = policy.SelectConstructor(builderContext, builderContext.PersistentPolicies);

            Assert.Equal(ctor, selectedCtor.Constructor);
            Assert.Equal(2, selectedCtor.GetParameterResolvers().Length);

            var resolvers = selectedCtor.GetParameterResolvers();

            Assert.Equal(2, resolvers.Length);
            foreach (var resolverPolicy in resolvers)
            {
                AssertPolicyIsCorrect(resolverPolicy);
            }
        }
        public void InjectionConstructorInsertsChooserForConstructorWithParameters()
        {
            string expectedString = "Hello";
            int    expectedInt    = 12;

            var ctor    = new InjectionConstructor(expectedString, expectedInt);
            var context = new MockBuilderContext
            {
                BuildKey = new NamedTypeBuildKey(typeof(GuineaPig))
            };
            IPolicyList policies = context.PersistentPolicies;

            ctor.AddPolicies(typeof(GuineaPig), policies);

            var selector = policies.Get <IConstructorSelectorPolicy>(
                new NamedTypeBuildKey(typeof(GuineaPig)));

            SelectedConstructor selected = selector.SelectConstructor(context, policies);
            var resolvers = selected.GetParameterResolvers();

            Assert.Equal(typeof(GuineaPig).GetMatchingConstructor(Sequence.Collect(typeof(string), typeof(int))), selected.Constructor);
            Assert.Equal(2, resolvers.Length);

            Assert.Equal(expectedString, (string)resolvers[0].Resolve(null));
            Assert.Equal(expectedInt, (int)resolvers[1].Resolve(null));
        }
Beispiel #3
0
        public void SelectConstructorWithNoParameters()
        {
            ConstructorInfo ctor = typeof(ClassWithSimpleConstructor).GetMatchingConstructor(new Type[0]);

            var policy         = new SpecifiedConstructorSelectorPolicy(ctor, new InjectionParameterValue[0]);
            var builderContext = new BuilderContextMock(new NamedTypeBuildKey(typeof(ClassWithSimpleConstructor)));

            SelectedConstructor selectedCtor = policy.SelectConstructor(builderContext, new PolicyList());

            Assert.Equal(ctor, selectedCtor.Constructor);
            Assert.Equal(0, selectedCtor.GetParameterResolvers().Length);
        }
Beispiel #4
0
            private static SelectedConstructor FindNewConstructor(SelectedConstructor originalConstructor, Type interceptingType)
            {
                ParameterInfo[] originalParams = originalConstructor.Constructor.GetParameters();

                ConstructorInfo newConstructorInfo =
                    interceptingType.GetConstructor(originalParams.Select(pi => pi.ParameterType).ToArray());

                SelectedConstructor newConstructor = new SelectedConstructor(newConstructorInfo);

                foreach (IDependencyResolverPolicy resolver in originalConstructor.GetParameterResolvers())
                {
                    newConstructor.AddParameterResolver(resolver);
                }

                return(newConstructor);
            }
        private static void ResolveConstructorParameters(SelectedConstructor constructor, Dictionary <string, StepScopeDependency> constructorParameters)
        {
            var parameterResolvers = constructor.GetParameterResolvers();

            for (var i = 0; i < parameterResolvers.Length; i++)
            {
                var namedTypeResolver = parameterResolvers[i] as NamedTypeDependencyResolverPolicy;
                if (namedTypeResolver != null)
                {
                    var type = namedTypeResolver.Type;
                    var name = namedTypeResolver.Name;
                    if (StepScopeSynchronization.IsStepScope(type, name))
                    {
                        var parameter = constructor.Constructor.GetParameters()[i];
                        constructorParameters[parameter.Name] = new StepScopeDependency(type, name);
                    }
                }
            }
        }
        private IEnumerable <Expression> BuildConstructionParameterExpressions(DynamicBuildPlanGenerationContext buildContext, SelectedConstructor selectedConstructor, string constructorSignature)
        {
            int i = 0;
            var constructionParameters = selectedConstructor.Constructor.GetParameters();

            foreach (IDependencyResolverPolicy parameterResolver in selectedConstructor.GetParameterResolvers())
            {
                yield return(buildContext.CreateParameterExpression(
                                 parameterResolver,
                                 constructionParameters[i].ParameterType,
                                 Expression.Call(null,
                                                 SetCurrentOperationToResolvingParameterMethod,
                                                 Expression.Constant(constructionParameters[i].Name, typeof(string)),
                                                 Expression.Constant(constructorSignature),
                                                 buildContext.ContextParameter)));

                i++;
            }
        }
        public void InjectionConstructorInsertsChooserForDefaultConstructor()
        {
            var ctor    = new InjectionConstructor();
            var context = new MockBuilderContext
            {
                BuildKey = new NamedTypeBuildKey(typeof(GuineaPig))
            };
            IPolicyList policies = context.PersistentPolicies;

            ctor.AddPolicies(typeof(GuineaPig), policies);

            var selector = policies.Get <IConstructorSelectorPolicy>(
                new NamedTypeBuildKey(typeof(GuineaPig)));

            SelectedConstructor selected = selector.SelectConstructor(context, policies);

            Assert.Equal(typeof(GuineaPig).GetMatchingConstructor(new Type[0]), selected.Constructor);
            Assert.Equal(0, selected.GetParameterResolvers().Length);
        }
        public void InjectionConstructorSetsResolverForInterfaceToLookupInContainer()
        {
            var ctor    = new InjectionConstructor("Logger", typeof(ILogger));
            var context = new MockBuilderContext();

            context.BuildKey = new NamedTypeBuildKey(typeof(GuineaPig));
            IPolicyList policies = context.PersistentPolicies;

            ctor.AddPolicies(typeof(GuineaPig), policies);

            var selector = policies.Get <IConstructorSelectorPolicy>(
                new NamedTypeBuildKey(typeof(GuineaPig)));

            SelectedConstructor selected = selector.SelectConstructor(context, policies);
            var resolvers = selected.GetParameterResolvers();

            Assert.Equal(typeof(GuineaPig).GetMatchingConstructor(Sequence.Collect(typeof(string), typeof(ILogger))), selected.Constructor);
            Assert.Equal(2, resolvers.Length);

            var policy = resolvers[1];

            Assert.True(policy is NamedTypeDependencyResolverPolicy);
        }
 private static void ResolveConstructorParameters(SelectedConstructor constructor, Dictionary<string, StepScopeDependency> constructorParameters)
 {
     var parameterResolvers = constructor.GetParameterResolvers();
     for (var i = 0; i < parameterResolvers.Length; i++)
     {
         var namedTypeResolver = parameterResolvers[i] as NamedTypeDependencyResolverPolicy;
         if (namedTypeResolver != null)
         {
             var type = namedTypeResolver.Type;
             var name = namedTypeResolver.Name;
             if (StepScopeSynchronization.IsStepScope(type, name))
             {
                 var parameter = constructor.Constructor.GetParameters()[i];
                 constructorParameters[parameter.Name] = new StepScopeDependency(type, name);
             }
         }
     }
 }
        private IEnumerable<Expression> BuildConstructionParameterExpressions(DynamicBuildPlanGenerationContext buildContext, SelectedConstructor selectedConstructor, string constructorSignature)
        {
            int i = 0;
            var constructionParameters = selectedConstructor.Constructor.GetParameters();

            foreach (IDependencyResolverPolicy parameterResolver in selectedConstructor.GetParameterResolvers())
            {
                yield return buildContext.CreateParameterExpression(
                                parameterResolver,
                                constructionParameters[i].ParameterType,
                                Expression.Call(null,
                                                SetCurrentOperationToResolvingParameterMethod,
                                                Expression.Constant(constructionParameters[i].Name, typeof(string)),
                                                Expression.Constant(constructorSignature),
                                                buildContext.ContextParameter));
                i++;
            }
        }