Exemple #1
0
        public void AddBuilderMember(Type targetType, List <IBuilderMember> members)
        {
            var field = targetType.GetField(fieldName);

            //var field = targetType.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.SetField| BindingFlags.CreateInstance| BindingFlags.Static| BindingFlags.GetField);
            if (field == null)
            {
                throw new InjectionException(string.Format("type <{0}> not found  field <{1}>", targetType.FullName, fieldName));
            }
            if (field.IsInitOnly)
            {
                throw new InjectionException(string.Format("type <{0}> field <{1}> is can't write", targetType.FullName, fieldName));
            }
            BuilderParameterInfo paramInfo;

            if (hasValue)
            {
                paramInfo = BuilderParameterInfo.MakeValue(field.FieldType, null, value);
            }
            else
            {
                paramInfo = InjectorUtils.FromAttributeProvider(field, field.FieldType);
            }

            members.Add(new FieldBuilder(field, paramInfo));
        }
        public void AddBuilderMember(Type targetType, List <IBuilderMember> members)
        {
            var eventInfo = targetType.GetEvent(eventName);

            if (eventInfo == null)
            {
                throw new InjectionException(string.Format("type <{0}> not found  event <{1}>", targetType.FullName, eventName));
            }
            if (eventInfo.GetAddMethod(true) == null)
            {
                throw new InjectionException(string.Format("type <{0}> event <{1}> can't add", targetType.FullName, eventName));
            }

            BuilderParameterInfo paramInfo;

            if (hasValue)
            {
                paramInfo = BuilderParameterInfo.MakeValue(eventInfo.EventHandlerType, null, value);
            }
            else
            {
                paramInfo = InjectorUtils.FromAttributeProvider(eventInfo, eventInfo.EventHandlerType);
            }

            members.Add(new EventBuilder(eventInfo, paramInfo));
        }
        public void AddBuilderMember(Type targetType, List <IBuilderMember> members)
        {
            var property = targetType.GetProperty(propertyName);

            if (property == null)
            {
                throw new InjectionException(string.Format("type <{0}> not found  property <{1}>", targetType.FullName, propertyName));
            }
            if (!property.CanWrite)
            {
                throw new InjectionException(string.Format("type <{0}> property <{1}> can't write", targetType.FullName, propertyName));
            }
            BuilderParameterInfo paramInfo;

            if (hasValue)
            {
                paramInfo = BuilderParameterInfo.MakeValue(property.PropertyType, null, value);
            }
            else
            {
                paramInfo = InjectorUtils.FromAttributeProvider(property, property.PropertyType);
            }


            members.Add(new PropertyBuilder(property, paramInfo));
        }
        public void AddBuilderMember(Type targetType, List <IBuilderMember> members)
        {
            BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.InvokeMethod;

            var injectParams = BuilderParameterInfo.FromArgs(args);

            var methodBase = InjectorUtils.FindMethod(targetType, methodName, args, bindingFlags);

            if (methodBase == null)
            {
                throw new InjectionException(string.Format("type <{0}> not found  method <{1}>", targetType, methodName));
            }
            members.Add(new MethodBuilder(methodBase, injectParams));
        }
Exemple #5
0
        public static BuilderParameterInfo[] FromMethod(MethodBase methodBase)
        {
            ParameterInfo[] parameters = methodBase.GetParameters();
            if (parameters.Length > 0)
            {
                BuilderParameterInfo[] injectParams = new BuilderParameterInfo[parameters.Length];
                for (int i = 0; i < parameters.Length; i++)
                {
                    var p           = parameters[i];
                    var injectParam = FromAttributeProvider(p, p.ParameterType);

                    injectParams[i] = injectParam;
                }
                return(injectParams);
            }
            return(BuilderParameterInfo.EmptyArray);
        }
Exemple #6
0
        internal static object GetValue(this IInjector source, BuilderParameterInfo parameterInfo, IEnumerable <IBuilderValue> values)
        {
            if (parameterInfo == null)
            {
                throw new ArgumentNullException(nameof(parameterInfo));
            }
            if (parameterInfo.HasValue)
            {
                return(parameterInfo.Value);
            }
            Type   valueType = parameterInfo.ParameterType;
            string name      = parameterInfo.Name;

            if (values != null)
            {
                foreach (var item in values)
                {
                    if (item.IsMatchValue(valueType, name))
                    {
                        return(item.GetValue(valueType, name));
                    }
                }
            }

            if (valueType != null)
            {
                object value;
                if (source.TryGetValue(valueType, name, out value))
                {
                    return(value);
                }

                if (source.IsTypeRegistered(valueType, name))
                {
                    return(source.CreateInstance(valueType, name, values.ToArray()));
                }
            }

            if (parameterInfo.HasDefaultValue)
            {
                return(parameterInfo.DefaultValue);
            }

            throw new BuilderValueNotFoundException(valueType, name);
        }
Exemple #7
0
        internal static BuilderParameterInfo FromAttributeProvider(ICustomAttributeProvider provider, Type defaultType, string defaultName = null)
        {
            var    valueAttr       = provider.GetCustomAttribute <InjectValueAttribute>(true);
            var    defaultAttr     = provider.GetCustomAttribute <DefaultValueAttribute>(true);
            Type   type            = null;
            string name            = null;
            bool   hasDefaultValue = false;
            object defaultValue    = null;

            if (valueAttr != null)
            {
                type = valueAttr.Type;
                name = valueAttr.Name;
            }
            if (defaultAttr != null)
            {
                defaultValue    = defaultAttr.DefaultValue;
                hasDefaultValue = true;
            }
            if (type == null)
            {
                type = defaultType;
            }
            if (string.IsNullOrEmpty(name))
            {
                name = defaultName;
            }
            BuilderParameterInfo p;

            if (hasDefaultValue)
            {
                p = BuilderParameterInfo.MakeDefault(type, name, defaultValue);
            }
            else
            {
                p = new BuilderParameterInfo(type, name);
            }

            return(p);
        }
Exemple #8
0
 public object GetValue(BuilderParameterInfo parameterInfo, IBuilderValue[] values)
 {
     return(injector.GetValue(parameterInfo, CombinValues(values, this.values)));
 }
 public InjectConstructor(params Type[] argTypes)
     : this(BuilderParameterInfo.FromTypes(argTypes))
 {
 }
 public InjectConstructor(params object[] args)
     : this(BuilderParameterInfo.FromArgs(args))
 {
 }