ASP.net MVC 3, filtros de ação e injeção de dependência de autofac

EmASP.NET MVC 2 eu tenho umActionFilterAttribute chamado[Transaction] que inicia uma transação NHibernate antes de executar a ação e a confirma ou reverte depois, dependendo se uma exceção foi lançada ou não. oISession instância éHttpRequestScoped() e injetado porAutofac. Parece assim e funciona muito bem:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public sealed class TransactionAttribute : ActionFilterAttribute
{
    private ITransaction transaction;

    public TransactionAttribute()
    {
        this.Order = 0;
    }

    public ISession Session
    {
        get;
        set;
    }

    public override void OnActionExecuted(
        ActionExecutedContext filterContext)
    {
        if (this.Session != null && this.transaction != null)
        {
            try
            {
                if (this.transaction.IsActive)
                {
                    if (filterContext.Exception == null)
                    {
                        this.transaction.Commit();
                    }
                    else
                    {
                        this.transaction.Rollback();
                    }
                }
            }
            finally
            {
                this.transaction.Dispose();
                this.transaction = null;
            }
        }
    }

    public override void OnActionExecuting(
        ActionExecutingContext filterContext)
    {
        if (this.Session != null)
        {
            this.transaction = this.Session.BeginTransaction();
        }
    }
}

Fantástico.Parece ser um padrão comum.

NoASP.NET MVC 3 observa, vejo essa pequena sinopse em "Breaking Changes" (ênfase minha):

Nas versões anteriores do ASP.NET MVC,filtros de ação foram criados por solicitação exceto em alguns casos. Esse comportamento nunca foi um comportamento garantido, mas apenas um detalhe de implementação e o contrato para filtros deveria considerá-los sem estado. No ASP.NET MVC 3, os filtros sãoarmazenado em cache de forma mais agressiva. Portanto, qualquer filtro de ação personalizado que armazena incorretamente o estado da instância pode ser quebrado.

Opa

Isso significa que eu sou processado se atualizar para o MVC 3?Se os filtros de ação não forem mais instanciados por solicitação, como obteremos dependências com escopo de solicitação em nossos filtros de ação?

Obrigado por qualquer insight.

questionAnswers(2)

yourAnswerToTheQuestion