示例#1
0
 private IEnumerator <ILiquidizable> GetEnumeratorInternal()
 {
     return(_enumerable
            .Cast <object>()
            .Select(x => LiquidUtil.CreateSafeObject(x))
            .OfType <ILiquidizable>()
            .GetEnumerator());
 }
示例#2
0
        protected object GetOrCreateSafeObject(string name)
        {
            if (!_safeObjects.TryGetValue(name, out var safeObject))
            {
                safeObject = LiquidUtil.CreateSafeObject(InvokeMember(name));
                if (safeObject is ISafeObject)
                {
                    _safeObjects[name] = safeObject;
                }
            }

            return(safeObject);
        }
示例#3
0
        private RenderParameters CreateParameters(object data, IFormatProvider formatProvider)
        {
            var p = new RenderParameters(formatProvider);

            Hash hash = null;

            if (data is ISafeObject so)
            {
                if (so.GetWrappedObject() is IDictionary <string, object> soDict)
                {
                    hash = Hash.FromDictionary(soDict);
                }
                else
                {
                    data = so.GetWrappedObject();
                }
            }

            if (hash == null)
            {
                hash = new Hash();

                if (data is IDictionary <string, object> dict)
                {
                    foreach (var kvp in dict)
                    {
                        hash[kvp.Key] = LiquidUtil.CreateSafeObject(kvp.Value);
                    }
                }
                else
                {
                    var props = FastProperty.GetProperties(data.GetType());
                    foreach (var prop in props)
                    {
                        hash[prop.Key] = LiquidUtil.CreateSafeObject(prop.Value.GetValue(data));
                    }
                }
            }

            p.LocalVariables   = hash;
            p.ErrorsOutputMode = HostingEnvironment.IsHosted ? ErrorsOutputMode.Display : ErrorsOutputMode.Rethrow;

            return(p);
        }