2011-05-14 5 views
0

저는 Mvc를 처음 사용합니다.asp.net mvc 컨트롤러 생성자에서 세션을 사용하고 싶습니다.

영어로 죄송합니다. ^^

컨트롤러에 asp.net MVC 세션에 대한 몇 가지 질문이 있습니다. 다음과 같이 내가 원하는

시나리오 일이 .. 모든

  1. 우선이다, 내 개발 환경은 entityframework 및 mvc3입니다.

  2. 로그인 한 사람마다 각각 다른 데이터베이스가 있습니다. 따라서 각각은 서로 다른 데이터베이스를 연결합니다.

  3. 그래서 각 사람은 데이터베이스 연결 문자열 인 자체 세션 값을가집니다. 여태까지는 그런대로 잘됐다.

  4. 나는 간단한 데이터베이스 저장소가 있으며 각 저장소의 생성자에서 데이터베이스 연결을 변경할 수 있습니다.

  5. 리포지토리 클래스를 호출하는 컨트롤러에서 세션 값이 필요합니다. 하지만 컨트롤러의 구성은 세션 값을 유지할 수 없다는 것을 알고 있습니다. 권리?

  6. 나는 당신의 좋은 충고를 원합니다. 미리 감사드립니다.

코드 샘플은 다음과 같습니다 :

public class MasterRepository 
{ 
    DBEntities _db; 

    public MasterRepository(string con) 
    { 
     _db = new DBEntities(con); 
    } 

} 

public class TestController : Controller 
{ 

    private string con; 

    MasterRepository _db; 

    public TestController() 
    { 
    _db = new MasterRepository(Session["conn"].ToString()); // Session is null I want to solve this Part... 
    } 

    public ActionResult Index() 
    { 

     string con = Session["conn"].ToString(); // Session is assigned. 

     return View(); 
    } 


}  

답변

0

난 당신이 컨트롤러의 "서비스"부분을 놓쳤다 고 생각 - 서비스 - 저장소 패턴 :

http://weblogs.asp.net/fredriknormen/archive/2008/04/24/what-purpose-does-the-repository-pattern-have.aspx

그러나 당신은 아마 IoC도 배울 필요가있을 것입니다. 널 (null)로 세션을 일으킬 무슨 일이 일어나고 있는지 설명해야한다

public class MasterRepository 
{ 
    public Foo GetAllFoo() 
    { 
     return ObjectContextManager.GetObjectContext().AsQueryable().ToList(); 
    } 
} 

public class MasterService 
{ 
    MasterRepository _repository; 
    public MasterService(MasterRepository repository) // use IoC 
    { 
     _repository = repository; 
    } 
    public Foo GetAllFoo() 
    { 
     return _repository.GetAllFoo(); 
    }  
}  

public class TestController : Controller 
{ 
    MasterService _service; 
    public TestController(MasterService service) // use IoC 
    { 
     _service = service; 
    } 

    public ActionResult Index() 
    {  
     var model _service.GetAllFoo(); 
     return View(model); 
    }  
}  
+0

감사합니다. JK !!! 하지만 그건 내가 원하는 것이 아닙니다. 컨트롤러의 컨스트럭터에 데이터베이스 연결을 유지하려면 내 세션 값을 내 컨트롤러에 사용하고 싶습니다. 포인트가 컨트롤러의 생성자로 설정되어 있지 않습니다. MasterRepository _db; public TestController() { // 세션이 null입니다.이 부분을 해결하고 싶습니다 ... _db = new MasterRepository (Session [ "conn"].ToString()); } _db 변수를 내 TestController에 사용하고 싶습니다. 컨트롤러의 생성자에 세션 값을 설정할 수 없다면 다른 방법이 있습니까? – jhKim