Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Controle de transações com filtros

Bom, é o seguinte:

Fiz a criação do filtro conforme o exercício tinha orientado:

using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Filters;
using System.Web.Mvc;

namespace LojaWeb.Filters
{
    public class TransactionFilter : System.Web.Mvc.ActionFilterAttribute
    {
        private ISession session;

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

        public override void OnActionExecuting(ActionExecutingContext contexto)
        {
            session.BeginTransaction();
        }

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

Mas na hora que vou registrá-lo no NinjectWebCommon dentro do método RegisterServices, como o exercício orientou:

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

    int ordemExecucao = 1;
    //A linha seguinte esta dando erro
    kernel.BindFilter<TransactionFilter>(FilterScope.Global, ordemExecucao);
}

Fica dando este erro:

Error    4    'Ninject.IKernel' does not contain a definition for 'BindFilter' and the best extension method overload 'Ninject.Web.Mvc.FilterBindingSyntax.BindingRootExtensions.BindFilter<T>(Ninject.Syntax.IBindingRoot, System.Web.Mvc.FilterScope, int?)' has some invalid arguments    C:\Projetos\LojaWeb\LojaWeb\LojaWeb\App_Start\NinjectWebCommon.cs    65    13    LojaWeb

Detalhe que importei o namespace que foi pedido pra usar:

using Ninject.Web.Mvc.FilterBindingSyntax;

Alguém poderia me dar uma sugestão pra corrigir isto?

3 respostas
solução!

OI Erick

Verifique se o FilterScope que você usou no código vem do namespace System.Web.Mvc.

Oi Erik

O seu problema foi resolvido?

Sim Victor! Muito obrigado pela ajuda!