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));
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))); }
public InjectableProperty(IInjectionExpression injectionExpression, PropertyInfo propertyInfo, Delegate targetGetterDelegate = null) : base(injectionExpression, propertyInfo, propertyInfo.PropertyType, targetGetterDelegate) { }
protected InjectableMemberBase(IInjectionExpression injectionExpression, TMemberInfo memberInfo, Type memberType, Delegate targetGetterDelegate) : base(injectionExpression, memberType) { _injectionDelegate = BuildInjectionDelegate(memberInfo, memberType, targetGetterDelegate); }
protected InjectableBase(IInjectionExpression injectionExpression, Type type) { InjectionExpression = injectionExpression; Type = type; }
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)); }