IAuthenticationFilter
을 구현하여 사용자 정의를 생성했습니다. 생성자 나는 structureMap
을 사용하여 IUnitOfWork
의 인스턴스를 가져옵니다. 이 인증 로직은 내가 IUnitOfWork HttpContextScoped
를 제공하기 위해 structureMap를 구성asp.net MVC : ActionFilters가 요청 당일 때 customAttribute 내에서 unitOfWork를 사용 하시겠습니까?
IUnitOfWork uow;
public CustomAuthenticatationAttribute()
{
this.uow = ObjectFactory.GetInstance<IUnitOfWork>();
}
.... 데이터베이스에서 사용자의 상태를 확인하는 것입니다.
x.For<IUnitOfWork>().HttpContextScoped().Use(() => new MyDbContext());
하지만 이상한 일이있었습니다. 한 작업에서 사용자를 삭제했지만 다른 작업에서 AuthenticationFilter가 실행될 때 unitOfWork의 인스턴스가 여전히 사용자를 반환합니다! 나는 시간 동안 웹을 검색하고 나는이 와서 : 짧은
Are ActionFilterAttributes reused across threads? How does that work?
, 그것은 필터 캐시 및 요청에 걸쳐 사용되는 것을 말한다!
이제 혼란스러워합니다. 이 문제를 어떻게 처리할까요? unitOfWork
을 사용하여 포기하고 using(var context = ....)
으로 돌아 가야하나요? 또는 필터 내부에 unitOfWork
을 사용하는 올바른 방법이 있습니다.
DefaultFilterProvider
대체하고 내가 그 가능하면 피하기 위해 선호 여기
https://gist.github.com/ivanra/9019273
해결책을 발견했다.