public bool MoveNext() { bool result = false; if (_members != null) { if (!_isAll) { while (_index >= 0 && _index < _members.Count && (_members[_index].Kind & _kind) != _members[_index].Kind) { _index++; } } if (_index >= 0 && _index < _members.Count) { _current = _members[_index]; _index++; result = true; } else { _current = null; } } if (!result) { if (_enumerable.AutoRelease) { TypeProvider.Push(_enumerable); } } return(result); }
protected virtual void ApplyProvider(object value, TypeProvider typeProvider) { if (typeProvider.Parent != null) { ApplyProvider(value, typeProvider.Parent); } var members = typeProvider.GetByAttribute <InjectAttribute>(true); if (members != null) { foreach (var member in members) { var kind = member.Kind; if ((kind & MemberKind.Field) == MemberKind.Field || (kind & MemberKind.Property) == MemberKind.Property) { var provider = GetProvider(member.ProviderType, true); if (provider != null) { if (member.ProviderType != member.Type) { member.SetValue(value, CreateLazy(provider, member.Type, member.ProviderType)); } else { member.SetValue(value, provider.Apply(this, member.Type)); } } } } } }
public virtual TypeProvider AddProvider(TypeProvider provider) { AddTypeProvider(provider); if (provider.Parsed) { AddToAttribute(provider); } return(provider); }
protected virtual TypeProvider CreateTypeProvider(Type type, MemberKind kind = MemberKind.All) { var provider = new TypeProvider(this, type); AddTypeProvider(provider); provider.Parse(kind); AddToAttribute(provider); return(provider); }
private void ApplyPostInject(object target, TypeProvider provider) { var methods = provider.GetByAttribute <PostInjectAttribute>(MemberKind.Method, true); if (methods != null) { foreach (var method in methods) { method.Apply(target, target.GetType(), this); } } }
private void AddToAttribute(TypeProvider provider) { foreach (var attribute in provider.MembersAttributes) { HashSet <TypeProvider> hashSet; if (!_byAttribute.TryGetValue(attribute, out hashSet)) { hashSet = new HashSet <TypeProvider>(); _byAttribute.Add(attribute, hashSet); } hashSet.Add(provider); } foreach (var attribute in provider.TypeAttributes) { Type attributeType = attribute.GetType(); HashSet <TypeProvider> hashSet; if (!_byAttribute.TryGetValue(attributeType, out hashSet)) { hashSet = new HashSet <TypeProvider>(); _byAttribute.Add(attributeType, hashSet); } hashSet.Add(provider); } }
public virtual void ParseProvider(TypeProvider provider, MemberKind kind = MemberKind.All) { AddTypeProvider(provider); provider.Parse(kind); AddToAttribute(provider); }
protected virtual void AddTypeProvider(TypeProvider provider) { _byType.Add(provider.Type, provider); }