/// <summary> /// /// </summary> /// <param name="kernel"></param> /// <param name="binding"></param> /// <param name="metadata"></param> /// <param name="instance"></param> public void Inject(IKernel kernel, IBinding binding, TypeMetadata metadata, object instance) { for (var i = 0; i < Injectors.Count; i++) { Injectors[i].Inject(kernel, binding, metadata, instance); } }
public TypeMetadata GetMetadata(Type type) { lock (metadatas) { TypeMetadata metadata; if (metadatas.TryGetValue(type, out metadata)) { return metadata; } var constructors = type.GetConstructors() .OrderByDescending(c => c.IsDefined(InjectType, true) ? 1 : 0) .ThenByDescending(c => c.GetParameters().Length) .Select(c => CreateConstructorMetadata(c)) .ToList(); var properties = type.GetProperties() .Where(p => p.IsDefined(InjectType, true)) .Select(p => CreatePropertyMetadata(p)) .ToList(); metadata = new TypeMetadata(constructors, properties); metadatas[type] = metadata; return metadata; } }
public void Inject(IKernel kernel, IBinding binding, TypeMetadata metadata, object instance) { if (metadata.TargetProperties.Count == 0) { return; } for (var i = 0; i < metadata.TargetProperties.Count; i++) { var property = metadata.TargetProperties[i]; var parameter = binding.GetPropertyValue(property.Accessor.Name); var value = parameter != null ? parameter.Resolve(kernel) : kernel.Resolve(property.Accessor.Type, property.Constraint); property.Accessor.SetValue(instance, value); } }