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 methodInfo = controller.GetType().GetMethod(actionNome);
            var methodInfo = _actionBinder.ObterActionBindInfo(controller, path);

            var resultadoAction = (string)methodInfo.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();
        }
        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 actionBindInfo = _actionBinder.ObterActionBindInfo(controller, path);

            var filterResult = _filterResolver.VerificarFiltros(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();
            }
        }
        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 caminhoDividido = path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

            var controllerAssembly = $"ByteBank.Portal.Controller.{caminhoDividido[0]}Controller";
            var action             = caminhoDividido[1];

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

            var methodInfo = _actionBinder.ObterActionBindInfo(controller, path);

            var resultadoAction = (string)methodInfo.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();
        }