フィルタを作成して、データベースへのアクセスが必要なアクションに配置したいと思います。このフィルターは現在の作業単位を破棄するため、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.
どうすればこれを修正できますか?