public override object Get(IDependencyInjector injector) { if (_alreadyInvoke) throw new CyclicDependencyException(FactoryStack); FactoryStack.Push(this); _alreadyInvoke = true; var parameters = new object[_constructorData.Count]; for (int i = 0; i < parameters.Length; i++) { ParameterData data = _constructorData.ParametersData[i]; parameters[i] = injector.Resolve(data.Type, data.InjectableAttribute, data.ServiceKey); } object instance = _constructorData.ConstructorInfo.Invoke(parameters); foreach (FieldData field in _fieldsData) { object value; injector.TryResolve(out value, field.Type, field.InjectableAttribute, field.ServiceKey); field.FieldInfo.SetValue(instance, value); } foreach (PropertyData property in _propertiesData) { object value; injector.TryResolve(out value, property.Type, property.InjectableAttribute, property.ServiceKey); property.PropertyInfo.SetValue(instance, value); } _alreadyInvoke = false; FactoryStack.Pop(); return instance; }