예제 #1
0
        private static InjectableDefinition CreateInjectDefinition(Type type)
        {
            InjectableDefinition definition = new InjectableDefinition();

            AddInjectableMembers(definition, type, BINDING_FLAGS);
            AddInjectableInheritedMembers(definition, type.BaseType);
            return(definition);
        }
예제 #2
0
        private static void AddInjectableInheritedMembers(InjectableDefinition definition, Type currentType)
        {
            if (currentType == null || currentType == MONO_TYPE)
            {
                return;
            }

            AddInjectableMembers(definition, currentType, BINDING_FLAGS_PRIVATE);
            AddInjectableInheritedMembers(definition, currentType.BaseType);
        }
예제 #3
0
 private static void AddInjectableMembers(InjectableDefinition definition, Type type, BindingFlags flags)
 {
     MemberInfo[] infos = type.GetMembers(flags);
     for (int i = 0; i < infos.Length; i++)
     {
         object[] attributes = infos[i].GetCustomAttributes(INJECT_ATTRIBUTE_TYPE, true);
         if (attributes.Length != 0)
         {
             definition.Add(infos[i], (InjectAttribute)attributes[0]);
         }
     }
 }
예제 #4
0
        public static void InjectInto(IServiceLocator locator, object target)
        {
            InjectableDefinition definition = GetInjectDefinition(target);

            foreach (KeyValuePair <FieldInfo, InjectAttribute> pair in definition.Fields)
            {
                Type   type     = pair.Value.InjectType ?? pair.Key.FieldType;
                object id       = pair.Value.Id ?? ServiceLocator.DEFAULT_SERVICE_KEY;
                object instance = locator.GetInstance(type, id);
                pair.Key.SetValue(target, instance);
            }

            foreach (KeyValuePair <PropertyInfo, InjectAttribute> pair in definition.Properties)
            {
                Type   type     = pair.Value.InjectType ?? pair.Key.PropertyType;
                object id       = pair.Value.Id ?? ServiceLocator.DEFAULT_SERVICE_KEY;
                object instance = locator.GetInstance(type, id);
                pair.Key.SetValue(target, instance, null);
            }
        }