private IEnumerable <object> ResolveConstructorParametersFoIEnumerable(ObjectInContainer ObjectInContainer) { foreach (var parameter in ObjectInContainer.ConstructorArguments) { yield return(ResolveObject(parameter)); } }
private IEnumerable <object> ResolveConstructorParameters(ObjectInContainer ObjectInContainer) { var constructorInfo = ObjectInContainer.ResolvedClassType.GetConstructors().First(); foreach (var parameter in constructorInfo.GetParameters()) { yield return(ResolveObject(parameter.ParameterType)); } }
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); }