示例#1
0
 private IEnumerable <object> ResolveConstructorParametersFoIEnumerable(ObjectInContainer ObjectInContainer)
 {
     foreach (var parameter in ObjectInContainer.ConstructorArguments)
     {
         yield return(ResolveObject(parameter));
     }
 }
示例#2
0
        private IEnumerable <object> ResolveConstructorParameters(ObjectInContainer ObjectInContainer)
        {
            var constructorInfo = ObjectInContainer.ResolvedClassType.GetConstructors().First();

            foreach (var parameter in constructorInfo.GetParameters())
            {
                yield return(ResolveObject(parameter.ParameterType));
            }
        }
示例#3
0
        private object GetInstance(ObjectInContainer objectInContainer)
        {
            if (objectInContainer.ObjectType == ObjectTypeEnum.IEnumerable)
            {
                var parameters = ResolveConstructorParametersFoIEnumerable(objectInContainer);

                Type       elementType = objectInContainer.ResolvedClassType.GenericTypeArguments.First();
                MethodInfo castMethod  = typeof(Enumerable).GetMethod("Cast").MakeGenericMethod(new System.Type[] { elementType });

                var castedObjectEnum = castMethod.Invoke(null, new object[] { parameters });

                objectInContainer.CreateInstance(new object[] { castedObjectEnum });
            }
            else if (objectInContainer.ClassInstance == null || objectInContainer.LifeCycle == LifeStyleEnum.Transient)
            {
                var parameters = ResolveConstructorParameters(objectInContainer);
                objectInContainer.CreateInstance(parameters.ToArray());
            }

            return(objectInContainer.ClassInstance);
        }