Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Métodos do TransactionFilter não são chamados

com exceção do Contrutor os métodos OnActionExecuted e OnActionExecuting do filtro TransactionFilter não são chamados antes de depois das chamadas aos controllers. Eu tenho que registrá-lo em alguma classe de inicialização?

namespace LojaWeb.Filters
{
    public class TransactionFilter : ActionFilterAttribute
    {
        ISession session;        

        public TransactionFilter(ISession session)
        {
            this.session = session;
        }

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            if (actionExecutedContext.Exception == null)
            {
                session.Transaction.Commit();
            }
            else
            {
                session.Transaction.Rollback();
            }
            session.Close();
        }

        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            session.BeginTransaction();            
        }
    }
}

Classe NinjectWebCommon

private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<ISession>().ToMethod(x => NHibernateHelper.AbreSession()).InRequestScope();

            int ordemExecucao = 1;
            kernel.BindFilter<TransactionFilter>(FilterScope.Global, ordemExecucao);
        }
1 resposta
solução!

Descobri o problema. Seria interessante mencionar isso no curso. Quando se criar a classe TransactionFilter precisa extender o ActionFilterAttribute e este possui 2 namespaces válidos: using System.Web.Http.Filters; using System.Web.Mvc;

E para funcionar precisa ser o System.Web.Mvc e o que vem em primeiro lugar é o System.Web.Http.Filters e acabei usando ele, o melhor é que os métodos (override) deles são ligeiramente diferentes mais compila e executa sem erros, mas, não funciona as chamadas de seus métodos.