private object GetInstance(RegisteredObject registeredObject) { object instance = registeredObject.SingletonInstance; if (instance == null) { var parameters = ResolveConstructorParameters(registeredObject); instance = registeredObject.CreateInstance(parameters.ToArray()); } return(instance); }
private object ResolveConstructor(RegisteredObject resolvingType) { object result = null; foreach (var constructor in resolvingType.ConcreteType.GetConstructors().OrderBy(c => c.GetParameters().Count())) { var constructorParams = constructor.GetParameters(); if (!constructorParams.Select(p => p.ParameterType).Except(_registeredTypes.Keys).Any()) { var paramInfos = constructorParams.Select(c => Resolve(c.ParameterType)).ToArray(); result = resolvingType.CreateInstance(paramInfos); } } return(result); }
private object GetInstance(RegisteredObject registeredObject, LifeCycle preferredLifeCycle = LifeCycle.Default, params object[] parameters) { var objectLifeCycle = preferredLifeCycle != LifeCycle.Default ? preferredLifeCycle : registeredObject.LifeCycle; object obj = null; if (registeredObject.Instance == null || objectLifeCycle == LifeCycle.Default || objectLifeCycle == LifeCycle.Transient) { object[] paramArray = null; if (parameters == null || parameters.Length == 0) { var param = ResolveConstructorParameters(registeredObject); paramArray = param == null ? null : param.ToArray(); } obj = registeredObject.CreateInstance(context, objectLifeCycle, paramArray); Debug.Log("Successfully resolved " + registeredObject.TypeToResolve + " as " + registeredObject.ConcreteType + " by " + objectLifeCycle + " from new object"); return(obj); } else { Debug.Log("Successfully resolved " + registeredObject.TypeToResolve + " as " + registeredObject.ConcreteType + " by " + objectLifeCycle + " from cached instance"); return(registeredObject.Instance); } }