Exemplo n.º 1
0
        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;
        }