private object GetInstance(RegisteredObject registeredObject) { if (registeredObject.Instance == null) { var parameters = ResolveConstructorParameters(registeredObject); registeredObject.CreateInstance(parameters.ToArray()); var propertiesToSet = registeredObject.ConcreteType .GetProperties() .Where(x => x.CanWrite && _registeredObjects.Any(y => y.TypeToResolve == x.PropertyType)); foreach (var property in propertiesToSet) { property.SetValue(registeredObject.Instance, ResolveObject(property.PropertyType)); } } return(registeredObject.Instance); }