예제 #1
0
 protected BindAttributeBase(BindScope bindingScope, ConditionSource conditionSource, ConditionComparer conditionComparer, object conditionTarget)
     : this(bindingScope)
 {
     ConditionSource   = conditionSource;
     ConditionComparer = conditionComparer;
     ConditionTarget   = conditionTarget;
 }
예제 #2
0
 protected BindAttributeBase(BindScope bindingScope, ConditionSource conditionSource, ConditionComparer conditionComparer, object conditionTarget)
     : this(bindingScope)
 {
     ConditionSource = conditionSource;
     ConditionComparer = conditionComparer;
     ConditionTarget = conditionTarget;
 }
예제 #3
0
        static Predicate <InjectionContext> ToCondition(ConditionSource source, ConditionComparer comparer, object target)
        {
            return(c =>
            {
                switch (source)
                {
                default:
                case ConditionSource.Container:
                    return ConditionComparer(c.Container, (IContainer)target, comparer);

                case ConditionSource.Element:
                    return ConditionComparer(c.Element, (IInjectableElement)target, comparer);

                case ConditionSource.ContextType:
                    return ConditionComparer(c.Type, (ContextTypes)target, comparer);

                case ConditionSource.Instance:
                    return ConditionComparer(c.Instance, target, comparer);

                case ConditionSource.ContractType:
                    return ConditionComparer(c.ContractType, (Type)target, comparer);

                case ConditionSource.DeclaringType:
                    return ConditionComparer(c.DeclaringType, (Type)target, comparer);

                case ConditionSource.Identifier:
                    return ConditionComparer(c.Identifier, (string)target, comparer);

                case ConditionSource.Optional:
                    return ConditionComparer(c.Optional, (bool)target, comparer);
                }
            });
        }
        public Expression GetLeftHandExpression(Expression root)
        {
            var sourceTokens = ConditionSource.Split('.');

            foreach (var token in sourceTokens)
            {
                var tokenProperty = root.Type.GetProperty(token);

                if (tokenProperty == null)
                {
                    throw new InvalidOperationException(string.Format("Cannot find property '{0}' in path '{1}' for root node of type {2}.", token, ConditionSource, root.Type.ToString()));
                }

                root = Expression.MakeMemberAccess(root, root.Type.GetProperty(token));
            }

            return(root);
        }
예제 #5
0
 public BindAllAttribute(BindScope bindingScope, ConditionSource conditionSource, ConditionComparer conditionComparer, object conditionTarget)
     : base(bindingScope, conditionSource, conditionComparer, conditionTarget)
 {
 }
예제 #6
0
 public BindAllAttribute(BindScope bindingScope, ConditionSource conditionSource, ConditionComparer conditionComparer, object conditionTarget) : base(bindingScope, conditionSource, conditionComparer, conditionTarget)
 {
 }
예제 #7
0
 public BindAttribute(Type contractType, Type[] baseTypes, BindScope bindingScope, ConditionSource conditionSource, ConditionComparer conditionComparer, object conditionTarget)
     : base(bindingScope, conditionSource, conditionComparer, conditionTarget)
 {
     ContractType = contractType;
     BaseTypes = baseTypes;
 }
예제 #8
0
 public BindAttribute(Type contractType, BindScope bindingScope, ConditionSource conditionSource, ConditionComparer conditionComparer, object conditionTarget)
     : this(contractType, Type.EmptyTypes, bindingScope, conditionSource, conditionComparer, conditionTarget)
 {
 }
예제 #9
0
 public BindAttribute(Type contractType, Type[] baseTypes, BindScope bindingScope, ConditionSource conditionSource, ConditionComparer conditionComparer, object conditionTarget)
     : base(bindingScope, conditionSource, conditionComparer, conditionTarget)
 {
     ContractType = contractType;
     BaseTypes    = baseTypes;
 }
예제 #10
0
 public BindAttribute(Type contractType, BindScope bindingScope, ConditionSource conditionSource, ConditionComparer conditionComparer, object conditionTarget)
     : this(contractType, Type.EmptyTypes, bindingScope, conditionSource, conditionComparer, conditionTarget)
 {
 }
예제 #11
0
 public IBinding When(ConditionSource source, ConditionComparer comparer, object target)
 {
     return(When(ToCondition(source, comparer, target)));
 }