4

フィルタを作成して、データベースへのアクセスが必要なアクションに配置したいと思います。このフィルターは現在の作業単位を破棄するため、1回のアクションで1回以上手動で呼び出す必要はありません。私はこれをやっています:

    public class DisposeUnitOfWorkAttribute :FilterAttribute, IActionFilter
    {
        public Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
        {
            IUnitOfWork currentUnitOfWork = UnitOfWork.Current;
            if (currentUnitOfWork != null)
            {
                currentUnitOfWork.Dispose();
            }
            return null;
        }

        public bool AllowMultiple
        {
            get { return false; }
        }
    }


    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new DisposeUnitOfWorkAttribute());
            filters.Add(new HandleErrorAttribute());
        }
    }


        [DisposeUnitOfWork]
        public ViewResult Index()
        {            
            var user = _usersRepository.Get(x => x.Username == "jack").ToList();
            //UnitOfWork.Current.Dispose();
            return View();
        }

例外が発生します:The given filter instance must implement one or more of the following filter interfaces: IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter.

どうすればこれを修正できますか?

4

2 に答える 2

2

ActionFilterAttributeNot FilterAttributeから継承する必要があると思います

public class DisposeUnitOfWorkAttribute : ActionFilterAttribute
{
   ...
}
于 2012-09-21T19:50:13.300 に答える