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;
        }
        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;
        }