public void Manipular(HttpListenerResponse resposta, string path)
        {
            // split com remoção de partes vaias.
            var partesPath = path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

            var controllerNome = partesPath[0];
            var actionNome     = partesPath[1];

            var nomeCompleto = $"ByteBank.Portal.Controller{controllerNome}.{actionNome}";

            // criamos uma instancia da classe (Foi comentando quando implementamos injecao de dependecias)
            // pois nao preciramos mais unsar o get instance.
            //var controllerWrapper = Activator.CreateInstance("ByteBank.Portal", nomeCompleto, new object[0]);

            //// captura e retorna o metodo original que criamos
            //var controller = controllerWrapper.Unwrap();

            var controller = _controllerResolver.ObterController(nomeCompleto);

            // buscando informações dos metodos do nosso controller
            // criamos o novo tipo para poder passar diretamente para os dois casos
            var actionBindInfo = _actionBinder.ObterActionBinderMethodInfo(controller, path);
            var filterResult   = _filterResolver.VerficarFiltros(actionBindInfo);

            if (filterResult.PodeContinuar)
            {
                // executar o metodo e recuperar uma string
                var resultadoAction = (string)actionBindInfo.Invoke(controller);

                var bufferArquivo = Encoding.UTF8.GetBytes(resultadoAction);

                resposta.StatusCode      = 200;
                resposta.ContentType     = "text/html; charset=utf-8";
                resposta.ContentLength64 = bufferArquivo.Length;
                resposta.OutputStream.Write(bufferArquivo, 0, bufferArquivo.Length);
                resposta.OutputStream.Close();
            }
            else
            {
                resposta.StatusCode       = 307;
                resposta.RedirectLocation = "/Erro/Inesperado";
                resposta.OutputStream.Close();
            }
        }
        public void Manipular(HttpListenerResponse resposta, string path)
        {
            // Pegando o nome da controller
            var controllerNome = path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[0];

            var controllerNomeCompleto = $"ByteBank.Portal.Controller.{controllerNome}Controller";

            // Criando uma instancia do Controller recebido na requisição
            var controller = _controllerResolver.ObterController(controllerNomeCompleto);

            // Pegando metodo a ser executado (MethodInfo)
            var actionBindInfo = _actionBinder.ObterActionBindInfo(controller, path);

            // Verificando filtro, e identificando se o metodo podera ser executado
            var filterResult = _filterResolver.VerificarFiltros(actionBindInfo);

            if (filterResult.PodeContinuar)
            {
                // Executando metodo
                var resultadoAction = (string)actionBindInfo.Invoke(controller);

                // Retornando resultado (pagina)
                var bufferArquivo = Encoding.UTF8.GetBytes(resultadoAction);

                resposta.ContentType     = "text/html; charset=utf-8";
                resposta.StatusCode      = 200;
                resposta.ContentLength64 = bufferArquivo.Length;

                resposta.OutputStream.Write(bufferArquivo, 0, bufferArquivo.Length);
                resposta.OutputStream.Close();
            }
            else
            {
                // Retorna codigo de erro temporario
                resposta.StatusCode = 307;
                // Redirecionado para pagina de erro
                resposta.RedirectLocation = "/Erro/Inesperado";
                resposta.OutputStream.Close();
            }
        }
        public void Manipular(HttpListenerResponse resposta, string path)
        {
            var partes         = path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            var controllerNome = partes[0];
            var actionNome     = partes[1];

            var controllerNomeCompleto = $"ByteBank.Portal.Controller.{controllerNome}Controller";

            //var controllerWrapper = Activator.CreateInstance("ByteBank.Portal", controllerNomeCompleto, new object[0]);
            //var controller = controllerWrapper.Unwrap();

            var controller = _controllerResolver.ObterController(controllerNomeCompleto);
            //var methodInfo = controller.GetType().GetMethod(actionNome);
            var actionBindInfo = _actionBinder.ObterActionBindInfo(controller, path);

            var filterResult = _filterResolver.VerficarFiltros(actionBindInfo);

            if (filterResult.PodeContinuar)
            {
                var resultadoAction = (string)actionBindInfo.Invoke(controller);

                var buffer = Encoding.UTF8.GetBytes(resultadoAction);

                resposta.StatusCode      = 200;
                resposta.ContentType     = "text/html; charset=utf-8";
                resposta.ContentLength64 = buffer.Length;

                resposta.OutputStream.Write(buffer, 0, buffer.Length);
                resposta.OutputStream.Close();
            }
            else
            {
                resposta.StatusCode       = 307;
                resposta.RedirectLocation = "/Erro/Inesperado";
                resposta.OutputStream.Close();
            }
        }