示例#1
0
 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);
 }
示例#2
0
        //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);
                    }
                }
            }
        }