Пример #1
0
        /// <summary>
        /// Gets an instance of the type.
        /// </summary>
        /// <param name="sinject">The resolver to use to inject dependencies.</param>
        /// <param name="parameters">Constructor parameters.</param>
        /// <returns>An instance of the type.</returns>
        public override Object GetInstance(Sinject sinject, params Object[] parameters)
        {
            Object instance = ConstructInstance(sinject, parameters);

            InjectDependencies(sinject, instance, injectionFields, injectionProperties);
            return(instance);
        }
Пример #2
0
        /// <summary>
        /// Injects the dependencies into the specified fields and properties
        /// of the specified target using the specified Sinject instance to
        /// resolve the types.
        /// </summary>
        /// <param name="sinject">The sinjkect instance to use to resolve types.</param>
        /// <param name="target">The target object.</param>
        /// <param name="fields">The fields to inject into.</param>
        /// <param name="properties">The properties to inject into.</param>
        protected void InjectDependencies(Sinject sinject, Object target, FieldInfo[] fields, PropertyInfo[] properties)
        {
            foreach (FieldInfo fieldInfo in fields)
            {
                fieldInfo.SetValue(target, sinject.Resolve(fieldInfo.FieldType));
            }

            foreach (PropertyInfo propertyInfo in properties)
            {
                propertyInfo.SetValue(target, sinject.Resolve(propertyInfo.PropertyType), sinject.EmptyObjectArray);
            }
        }
Пример #3
0
        /// <summary>
        /// Gets an instance of the type.
        /// </summary>
        /// <param name="sinject">The resolver to use to inject dependencies.</param>
        /// <param name="parameters">Constructor parameters.</param>
        /// <returns>An instance of the type.</returns>
        public override Object GetInstance(Sinject sinject, params Object[] parameters)
        {
            if (instance == null)
            {
                instance = ConstructInstance(sinject, parameters);
                FieldInfo[]    injectionFields     = GetInjectionFields();
                PropertyInfo[] injectionProperties = GetInjectionProperties();
                InjectDependencies(sinject, instance, injectionFields, injectionProperties);
            }

            return(instance);
        }
Пример #4
0
        /// <summary>
        /// Constructs a new instance of the type.
        /// </summary>
        /// <param name="sinject">A Sinject instance to use to resolve dependency types.</param>
        /// <param name="parameters">Optional constructor parameters to use when no injection constructor is defined.</param>
        /// <returns>An instance of the type.</returns>
        /// <exception cref="DependencyMissingException"></exception>
        /// <exception cref="NoSuitableConstructorFoundException"></exception>
        protected Object ConstructInstance(Sinject sinject, params Object[] parameters)
        {
            ConstructorInfo constructorInfo = GetInjectionConstructor();

            if (constructorInfo != null)
            {
                ParameterInfo[] parameterInfos     = constructorInfo.GetParameters();
                Object[]        injectedParameters = new Object[parameterInfos.Length];

                for (int i = 0; i < parameterInfos.Length; i++)
                {
                    var parameterInfo   = parameterInfos[i];
                    var missingBehavior = DependencyMissingBehavior.Null;
                    InjectAttribute[] injectAttributes = parameterInfo.GetCustomAttributes(typeof(InjectAttribute), false) as InjectAttribute[];
                    if (injectAttributes.Length > 0)
                    {
                        missingBehavior = injectAttributes[0].DependencyMissingBehavior;
                    }

                    injectedParameters[i] = sinject.Resolve(parameterInfo.ParameterType);
                    if (injectedParameters[i] == null && missingBehavior == DependencyMissingBehavior.Throw)
                    {
                        throw new DependencyMissingException();
                    }
                }

                return(constructorInfo.Invoke(injectedParameters));
            }

            constructorInfo = GetDefaultConstructor(parameters);
            if (constructorInfo != null)
            {
                return(constructorInfo.Invoke(parameters));
            }

            throw new NoSuitableConstructorFoundException();
        }
Пример #5
0
 /// <summary>
 /// Gets an instance of the type.
 /// </summary>
 /// <param name="sinject">The resolver to use to inject dependencies.</param>
 /// <param name="parameters">Constructor parameters.</param>
 /// <returns>An instance of the type.</returns>
 public abstract Object GetInstance(Sinject sinject, params Object[] parameters);