2013-03-21 1 views
0

사용자가 로그인 페이지를 요청하면 LoginController가 호출되고 ninject가 컨트롤러에 적절한 저장소를 삽입합니다 (IAccountRepository). 로그인이 성공하면 저장소에서 사용자 정보를 얻은 다음 Session에 저장합니다 (AccInfo라고 말하십시오). 그러나 사용자가 유효한 인증 쿠키를 가지고있는 경우 내 쿠키가 내 사이트로 돌아 오면 세션에 AccInfo가 없지만 다른 컨트롤러 (IAccountRepository가 처음부터 주입되어 있지 않음)에서 사용하려고합니다. 지금 어떻게해야합니까? db에서 정보를 얻기 위해 구체적인 객체 (AccountRepository 인스턴스를 보자)를 호출하고 싶지는 않지만 여전히이 상황에서 DI를 사용하려고합니다.DI를 사용하여 세션에 데이터를 제공하는 적절한 저장소를 얻습니다.

답변

0

아마 세션에 AccInfo를 저장하면 안됩니까? userId 또는 somesuch를 저장 한 다음 항상 저장소를 삽입하고 userId를 사용하여 필요한 항목을 검색하십시오.

DB 액세스를 최소화하려면 저장소에서 캐싱을 사용하십시오.

+0

감사합니다. 그래서 모든 컨트롤러에 IAccountRepository를 주입해야합니까? 그리고 내 저장소에 캐싱에 대한 세부 정보를 줄 수 있습니까? –

+0

하나의 대안은 기본 컨트롤러를 사용하고 거기에서 저장소를 'OnActionExecuting' 메소드로 해결하는 것입니다. 그런 다음 상속 클래스에서 액세스 할 수있는 인스턴스 변수에 'AccInfo'를 할당 할 수 있습니다. 캐싱에 관해서는 요구 사항과 설정에 조금 의존하지만, 간단한 옵션 인'System.Runtime.Caching.MemoryCache' 클래스를 살펴 보겠습니다. – carlpett

+0

괜찮습니다. 고마워. –

관련 문제