private IJavascriptObject GetMapper(IJavascriptObjectMapper iMapperListener)
        {
            _JavascriptMapper.Enqueue(iMapperListener);

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

            _Mapper = _WebView.Factory.CreateObject();

            _Mapper.Bind("Register", _WebView, (e) =>
            {
                if (_PullNextMapper)
                {
                    _Current        = _JavascriptMapper.Dequeue();
                    _PullNextMapper = false;
                }

                if (_Current == null)
                {
                    return;
                }

                int count      = e.Length;
                var registered = e[0];

                switch (count)
                {
                case 1:
                    _Current.MapFirst(registered);
                    break;

                case 3:
                    _Current.Map(e[1], e[2].GetStringValue(), registered);
                    break;

                case 4:
                    _Current.MapCollection(e[1], e[2].GetStringValue(), e[3].GetIntValue(), registered);
                    break;
                }
            });

            _Mapper.Bind("End", _WebView, (e) =>
            {
                if (_PullNextMapper)
                {
                    _Current = _JavascriptMapper.Dequeue();
                }

                _Current?.EndMapping(e[0]);
                _Current        = null;
                _PullNextMapper = true;
            });

            return(_Mapper);
        }