static public InjectableProperty <TInputTarget, TValue> AsInjectable <TInputTarget, TValue>
 (
     this PropertyInfo propertyInfo,
     Delegate targetSelectorDelegate,
     IInjectionExpression injectionExpression = null
 )
 => AsInjectableBase(propertyInfo, propertyInfo.PropertyType, injectionExpression,
                     x => new InjectableProperty <TInputTarget, TValue>(x, propertyInfo, targetSelectorDelegate));
 static public InjectableField <TInputTarget, TValue> AsInjectable <TInputTarget, TSelectedTarget, TValue>
 (
     this FieldInfo fieldInfo,
     Func <TInputTarget, TSelectedTarget> targetSelector,
     IInjectionExpression injectionExpression = null
 )
 => AsInjectableBase(fieldInfo, fieldInfo.FieldType, injectionExpression,
                     x => new InjectableField <TInputTarget, TValue>(x, fieldInfo, targetSelector));
 static private TInjectable AsInjectableBase <TInjectable>(
     MemberInfo memberInfo,
     Type memberType,
     IInjectionExpression injectionExpression,
     Func <IInjectionExpression, TInjectable> injectableFactory)
 {
     return(injectableFactory(injectionExpression ?? memberInfo.Attributes().ResolvableAttribute().GetInjectionScenario(memberType)));
 }
 static public InjectableField <TInputTarget, TValue> AsInjectable <TInputTarget, TValue>
 (
     this FieldInfo fieldInfo,
     Delegate targetSelectorDelegate,
     IInjectionExpression injectionExpression = null
 )
 => AsInjectableBase(fieldInfo, fieldInfo.FieldType, injectionExpression,
                     x => new InjectableField <TInputTarget, TValue>(x, fieldInfo, targetSelectorDelegate));
Пример #5
0
 public InjectableParameter(IInjectionExpression injectionExpression, ParameterInfo parameterInfo)
     : base(injectionExpression, parameterInfo.ParameterType)
 {
     HasDefaultValue = parameterInfo.HasDefaultValue;
     if (HasDefaultValue)
     {
         DefaultValue = parameterInfo.DefaultValue;
     }
 }
        static public void To <TModel, TView, TModelValue>(
            this IBindingBuilder <TModel, TView, TModelValue> binding,
            Expression <Func <TView, TModelValue> > viewGetterExpression,
            IInjectionExpression injectionExpression = null)
        {
            var      memberExpression = (MemberExpression)viewGetterExpression.Body;
            var      propertyInfo     = (PropertyInfo)memberExpression.Member;
            Delegate targetSelector   = Expression.Lambda(memberExpression.Expression, viewGetterExpression.Parameters).Compile();

            InjectableProperty <TView, TModelValue> injectable = propertyInfo.AsInjectable <TView, TModelValue>(targetSelector, injectionExpression);

            Func <TModel, TView, TModelValue> getter = binding.Getter;

            binding.Do((m, v) => injectable.Inject(v, getter(m, v)));
        }
Пример #7
0
 public InjectableProperty(IInjectionExpression injectionExpression, PropertyInfo propertyInfo, Delegate targetGetterDelegate = null)
     : base(injectionExpression, propertyInfo, propertyInfo.PropertyType, targetGetterDelegate)
 {
 }
Пример #8
0
 protected InjectableMemberBase(IInjectionExpression injectionExpression, TMemberInfo memberInfo, Type memberType, Delegate targetGetterDelegate)
     : base(injectionExpression, memberType)
 {
     _injectionDelegate = BuildInjectionDelegate(memberInfo, memberType, targetGetterDelegate);
 }
Пример #9
0
 protected InjectableBase(IInjectionExpression injectionExpression, Type type)
 {
     InjectionExpression = injectionExpression;
     Type = type;
 }
Пример #10
0
 public InjectableField(IInjectionExpression injectionExpression, FieldInfo fieldInfo, Delegate targetGetterDelegate = null)
     : base(injectionExpression, fieldInfo, fieldInfo.FieldType, targetGetterDelegate)
 {
 }
 static public InjectableField <TTarget, TValue> AsInjectable <TTarget, TValue>(this FieldInfo fieldInfo, IInjectionExpression injectionExpression = null)
 => AsInjectableBase(fieldInfo, fieldInfo.FieldType, injectionExpression, x => new InjectableField <TTarget, TValue>(x, fieldInfo));
 static public InjectableField <object, object> AsInjectable(this FieldInfo fieldInfo, IInjectionExpression injectionExpression = null)
 => AsInjectableBase(fieldInfo, fieldInfo.FieldType, injectionExpression, x => new InjectableField <object, object>(x, fieldInfo));
 static public InjectableProperty <TTarget, TValue> AsInjectable <TTarget, TValue>(this PropertyInfo propertyInfo, IInjectionExpression injectionExpression = null)
 => AsInjectableBase(propertyInfo, propertyInfo.PropertyType, injectionExpression, x => new InjectableProperty <TTarget, TValue>(x, propertyInfo));
        // AsInjectable

        static public InjectableProperty <object, object> AsInjectable(this PropertyInfo propertyInfo, IInjectionExpression injectionExpression = null)
        => AsInjectableBase(propertyInfo, propertyInfo.PropertyType, injectionExpression, x => new InjectableProperty <object, object>(x, propertyInfo));
        static public InjectableParameter AsInjectable(this ParameterInfo parameterInfo)
        {
            IInjectionExpression injectionExpression = parameterInfo.Attributes().ResolvableAttribute().GetInjectionScenario(parameterInfo.ParameterType);

            return(new InjectableParameter(injectionExpression, parameterInfo));
        }