private static InjectableDefinition CreateInjectDefinition(Type type) { InjectableDefinition definition = new InjectableDefinition(); AddInjectableMembers(definition, type, BINDING_FLAGS); AddInjectableInheritedMembers(definition, type.BaseType); return(definition); }
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); }
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]); } } }
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); } }