public override IMemberAccessor GetAccessor(Type type, string name)
        {
            var accessor = baseMemberAccessStrategy.GetAccessor(type, name);

            if (accessor != null)
            {
                return(accessor);
            }

            baseMemberAccessStrategy.Register(type);
            return(baseMemberAccessStrategy.GetAccessor(type, name));
        }
        /// <summary>
        /// Registers a limited set of properties in a type.
        /// </summary>
        /// <param name="strategy">The <see cref="MemberAccessStrategy"/>.</param>
        /// <param name="type">The type to register.</param>
        /// <param name="names">The names of the properties in the type to register.</param>
        public static void Register(this MemberAccessStrategy strategy, Type type, params string[] names)
        {
            var accessors = new Dictionary <string, IMemberAccessor>();

            foreach (var name in names)
            {
                accessors[name] = GetNamedAccessor(type, name, strategy.MemberNameStrategy);
            }

            strategy.Register(type, accessors);
        }
Example #3
0
        /// <summary>
        /// Initializes a new instance of <see cref="TemplateContext"/> wih a model and option regiter its properties.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="registerModelProperties">Whether to register the model properties or not.</param>
        public TemplateContext(object model, bool registerModelProperties = true)
        {
            Model = model ?? throw new ArgumentNullException(nameof(model));

            if (registerModelProperties)
            {
                MemberAccessStrategy.Register(model.GetType());
            }

            LocalScope = new Scope(GlobalScope);
        }
 /// <summary>
 /// Registers a type and all its public properties.
 /// </summary>
 /// <param name="strategy">The <see cref="MemberAccessStrategy"/>.</param>
 /// <param name="type">The type to register.</param>
 public static void Register(this MemberAccessStrategy strategy, Type type)
 {
     strategy.Register(type, GetTypeMembers(type, strategy.MemberNameStrategy));
 }
 /// <summary>
 /// Registers a type with a <see cref="Func{T, TemplateContext, TResult}"/> to retrieve the property specified.
 /// </summary>
 /// <param name="strategy">The <see cref="MemberAccessStrategy"/>.</param>
 /// <param name="name">The name of the property.</param>
 /// <param name="accessor">The <see cref="Func{T, TemplateContext, TResult}"/> instance used to retrieve the value.</param>
 public static void Register <T, TResult>(this MemberAccessStrategy strategy, string name, Func <T, TemplateContext, TResult> accessor)
 {
     strategy.Register(typeof(T), new[] { new KeyValuePair <string, IMemberAccessor>(name, new DelegateAccessor <T, TResult>((obj, propertyName, ctx) => accessor(obj, ctx))) });
 }
 /// <summary>
 /// Registers a type with a <see cref="T:Func{T, string, TemplateContext, Task{TResult}}"/> to retrieve any of
 /// its property values.
 /// </summary>
 /// <param name="strategy">The <see cref="MemberAccessStrategy"/>.</param>
 /// <param name="accessor">The <see cref="T:Func{T, string, TemplateContext, Task{TResult}}"/> instance used to retrieve the value.</param>
 public static void Register <T, TResult>(this MemberAccessStrategy strategy, Func <T, string, TemplateContext, Task <TResult> > accessor)
 {
     strategy.Register(typeof(T), new[] { new KeyValuePair <string, IMemberAccessor>("*", new AsyncDelegateAccessor <T, TResult>(accessor)) });
 }
 /// <summary>
 /// Registers a type using a <see cref="IMemberAccessor"/> to retrieve any of
 /// its property values.
 /// </summary>
 /// <param name="strategy">The <see cref="MemberAccessStrategy"/>.</param>
 /// <param name="type">The type to register.</param>
 /// <param name="getter">The <see cref="IMemberAccessor"/> instance used to retrieve the value.</param>
 public static void Register(this MemberAccessStrategy strategy, Type type, IMemberAccessor getter)
 {
     strategy.Register(type, new[] { new KeyValuePair <string, IMemberAccessor>("*", getter) });
 }
 /// <summary>
 /// Registers a named property when accessing a type using a <see cref="IMemberAccessor"/>
 /// to retrieve the value. The name of the property doesn't have to exist on the object.
 /// </summary>
 /// <typeparam name="T">The type to register.</typeparam>
 /// <param name="strategy">The <see cref="MemberAccessStrategy"/>.</param>
 /// <param name="name">The name of the property to intercept.</param>
 /// <param name="getter">The <see cref="IMemberAccessor"/> instance used to retrieve the value.</param>
 public static void Register <T>(this MemberAccessStrategy strategy, string name, IMemberAccessor getter)
 {
     strategy.Register(typeof(T), new[] { new KeyValuePair <string, IMemberAccessor>(name, getter) });
 }
 /// <summary>
 /// Registers a limited set of properties in a type.
 /// </summary>
 /// <typeparam name="T">The type to register.</typeparam>
 /// <param name="strategy">The <see cref="MemberAccessStrategy"/>.</param>
 /// <param name="names">The property's expressions in the type to register.</param>
 public static void Register <T>(this MemberAccessStrategy strategy, params Expression <Func <T, object> >[] names)
 {
     strategy.Register <T>(names.Select(ExpressionHelper.GetPropertyName).ToArray());
 }
 /// <summary>
 /// Registers a limited set of properties in a type.
 /// </summary>
 /// <typeparam name="T">The type to register.</typeparam>
 /// <param name="strategy">The <see cref="MemberAccessStrategy"/>.</param>
 /// <param name="names">The names of the properties in the type to register.</param>
 public static void Register <T>(this MemberAccessStrategy strategy, params string[] names)
 {
     strategy.Register(typeof(T), names);
 }