private Object GetInstance(CRegisteredObject registeredObject) { if (registeredObject.Instance == null || registeredObject.LifeCycle == ELifeCycle.Transient) { var parameters = ResolveConstructorParameters(registeredObject); var par = parameters.ToArray(); registeredObject.CreateInstance(par); } return(registeredObject.Instance); }
//This is a recursive operation that ensures the entire object graph is instantiated //Only registered types can be instantiated! private IEnumerable <Object> ResolveConstructorParameters(CRegisteredObject registeredObject) { //var constructorInfo = registeredObject.ConcreteType.GetConstructors().First(); var constructorInfo = registeredObject.ConcreteType.GetConstructors(); foreach (var item in constructorInfo) { foreach (var parameter in item.GetParameters()) { //yield return ResolveObject(parameter.ParameterType); var resolvedObject = ResolveObject(parameter.ParameterType); if (resolvedObject != null) { yield return(resolvedObject); } } } }