コード例 #1
0
ファイル: InjectPipeline.cs プロジェクト: usausa/Smart-Net-CE
 /// <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);
     }
 }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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);
            }
        }