コード例 #1
0
        public IJSCSGlue Map(object from, object additional = null)
        {
            if (from == null)
            {
                return(new JSBasicObject(null));
            }

            var res = _Cacher.GetCached(from);

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

            var command = from as ICommand;

            if (command != null)
            {
                return(_CommandFactory.Build(command));
            }

            var simpleCommand = from as ISimpleCommand;

            if (simpleCommand != null)
            {
                return(_CommandFactory.Build(simpleCommand));
            }

            var resultCommand = from as IResultCommand;

            if (resultCommand != null)
            {
                return(_CommandFactory.Build(resultCommand));
            }

            var type = from.GetType();

            if (_Context.IsTypeBasic(type))
            {
                return(new JSBasicObject(from));
            }

            if (type.IsEnum)
            {
                var trueres = new JSBasicObject(from);
                _Cacher.Cache(from, trueres);
                return(trueres);
            }

            var ienfro = from as IEnumerable;

            if (ienfro != null)
            {
                return(Convert(ienfro));
            }

            var propertyInfos = GetPropertyInfos(from).Concat(GetPropertyInfos(additional)).ToList();

            var gres = new JsGenericObject(from, propertyInfos.Count);

            _Cacher.Cache(from, gres);

            MappNested(gres, propertyInfos);
            return(gres);
        }
コード例 #2
0
        public IJSCSGlue InternalMap(object from, object iadditional = null)
        {
            if (from == null)
            {
                return(new JsGenericObject(_Context, null));
            }

            var res = _Cacher.GetCached(from);

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

            var command = from as ICommand;

            if (command != null)
            {
                return(_CommandFactory.Build(command));
            }

            var simpleCommand = from as ISimpleCommand;

            if (simpleCommand != null)
            {
                return(_CommandFactory.Build(simpleCommand));
            }

            var resultCommand = from as IResultCommand;

            if (resultCommand != null)
            {
                return(_CommandFactory.Build(resultCommand));
            }

            var type = from.GetType();

            if (_Context.WebView.Factory.IsTypeBasic(type))
            {
                return(new JSBasicObject(from));
            }

            if (type.IsEnum)
            {
                var trueres = new JSBasicObject(from);
                _Cacher.Cache(from, trueres);
                return(trueres);
            }

            var ienfro = from as IEnumerable;

            if (ienfro != null)
            {
                return(Convert(ienfro));
            }

            var gres = new JsGenericObject(_Context, from);

            _Cacher.Cache(from, gres);

            MappNested(from, gres);
            MappNested(iadditional, gres);

            return(gres);
        }
コード例 #3
0
        public IJSCSGlue Map(object from, object additional = null)
        {
            if (from == null)
            {
                return(_Null ?? (_Null = new JSBasicObject(null)));
            }

            var res = _Cacher.GetCached(from);

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

            var type = from.GetType();

            if (_Context.IsTypeBasic(type))
            {
                res = new JSBasicObject(from);
                _Cacher.CacheFromCSharpValue(from, res);
                return(res);
            }

            var command = from as ICommand;

            if (command != null)
            {
                return(_GlueFactory.Build(command));
            }

            var simpleCommand = from as ISimpleCommand;

            if (simpleCommand != null)
            {
                return(_GlueFactory.Build(simpleCommand));
            }

            var resultCommand = from as IResultCommand;

            if (resultCommand != null)
            {
                return(_GlueFactory.Build(resultCommand));
            }

            if (type.IsEnum)
            {
                var trueres = new JSBasicObject(from);
                _Cacher.CacheFromCSharpValue(from, trueres);
                return(trueres);
            }

            var ienfro = from as IEnumerable;

            if (ienfro != null)
            {
                return(Convert(ienfro));
            }

            var propertyInfos           = @from.GetType().GetReadProperties();
            var additionalPropertyInfos = additional?.GetType().GetReadProperties();

            var gres = _GlueFactory.Build(from, propertyInfos.Count + (additionalPropertyInfos?.Count ?? 0));

            _Cacher.CacheFromCSharpValue(from, gres);

            MappNested(gres, @from, propertyInfos);
            MappNested(gres, additional, additionalPropertyInfos);
            return(gres);
        }
コード例 #4
0
        public IJSCSGlue UnsafelMap(object from, object iadditional = null)
        {
            if (from == null)
            {
                return(JsGenericObject.CreateNull(_Context));
            }

            var res = _Cacher.GetCached(from);

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

            var command = from as ICommand;

            if (command != null)
            {
                return(_CommandFactory.Build(command));
            }

            var simpleCommand = from as ISimpleCommand;

            if (simpleCommand != null)
            {
                return(_CommandFactory.Build(simpleCommand));
            }

            var resultCommand = from as IResultCommand;

            if (resultCommand != null)
            {
                return(_CommandFactory.Build(resultCommand));
            }

            IJavascriptObject value;

            if (_Context.WebView.Factory.CreateBasic(from, out value))
            {
                return(new JSBasicObject(value, from));
            }

            if (from.GetType().IsEnum)
            {
                var trueres = new JSBasicObject(_Context.WebView.Factory.CreateEnum((Enum)from), from);
                _Cacher.CacheLocal(from, trueres);
                return(trueres);
            }

            var ienfro = from as IEnumerable;

            if (ienfro != null)
            {
                return(Convert(ienfro));
            }

            var resobject = _Context.WebView.Factory.CreateObject(true);

            var gres = new JsGenericObject(_Context, resobject, from);

            _Cacher.Cache(from, gres);

            MappNested(from, resobject, gres);
            MappNested(iadditional, resobject, gres);

            return(gres);
        }