2010-04-27 2 views
0

HttpSession을 사용하여 인스턴스를 저장하는 대신 asp.net MVC 응용 프로그램에서 StructureMap을 사용하려고합니다.HttpContext 부트 스트랩 후 인스턴스를 StructurMap에 삽입 범위가 지정됨

내 간단한 테스트 클래스 : 여기

public interface ICurrentSession 
{ 
    User User { get; set; } 
} 

public class CurrentSession : ICurrentSession 
{ 
    public User User { get; set; } 
} 

는 관련 레지스트리 내 부트 스트 래퍼에서 호출되는 코드입니다 : 내가 사용자를 인증 한 후 다음

x.For<ICurrentSession>().HttpContextScoped().Use<CurrentSession>(); 

그리고,이 전화 :

var session = new CurrentSession {User = user}; 
ObjectFactory.Inject<ICurrentSession>(session); 

그러나 ObjectFactory.GetInstance()를 호출 할 때마다 동일한 CurrentSession ins 각 세션 (여러 사용자가 로그인 한 상태의 여러 브라우저)에 대한 우선 순위. 내가 잘못하고있는 것, 또는 CurrentSession을 주입하고 로그인 한 각 사용자/세션에 대해 어떻게 범위를 지정할 수 있습니까?

+0

내가하려는 것은 다음과 같습니다. Session 객체를 저장하는 HttpSessionState의 기능을 복제하십시오. – mxmissile

답변

2

왜 인스턴스를 삽입하려고하는지 명확하지 않습니다 (등록 코드를 덮어 쓰게됩니다). 현재 요청에 적용되는 현재 인스턴스를 검색 한 다음 사용자를 설정해야합니다. 해당 요청 내의 ICurrentSession에 대한 추가 요청은 동일한 인스턴스를 가져옵니다. 사용자를 인증 한 후

, 전화 :

ObjectFactory.GetInstance<ICurrentSession>().User = user; 

질문의 등록 코드는 현재 HTTP 요청에 대한 범위 인스턴스를 것이다. 인스턴스가 여러 요청에서 생존하고 전체 ASP.NET 세션 동안 사용되도록하려면 HttpSession 수명주기를 사용해야합니다. 이 라이프 사이클에 대한 편리한 메소드가 없습니다 (사용하지 않기 때문에 테스트를 거치지 않았 음을 경고합니다). 사용 가능 :

x.For<ICurrentSession>() 
    .LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.HttpSession))) 
    .Use<CurrentSession>(); 
+0

그건 의미가 있습니다. 그러나, 나는 동일한 Session 내에서 분리 된 Request가 CurrentSession의 다른 인스턴스를받을 것이라고 가정한다. – mxmissile

+0

예, 요청에 따라 작동하도록 답변을 업데이트했습니다. –