2010-11-22 2 views
1

페이지의 시작부터 객체를 초기화하고 객체를 통해 특정 페이지 밖으로 객체를 사용해야 어떻게 할 수 있습니까?asp.net 페이지에서 페이지를 시작할 때 객체를 초기화하는 방법

// 블록이

  XTContext.UserContext UContext = new XTContext.UserContext(); 
      XTContext.Context ctxt = new XTContext.Context(); 
      XTErrorCollection.ErrorCollection eContext = new XTErrorCollection.ErrorCollection(); 
      ctxt = (XTContext.Context)Cache["sessionfContext"]; 
      ctxt.eContext = eContext; 
      ctxt.uContext = UContext; 

을 초기화 할 지금은 페이지 및 제어 이벤트 내부의 ctxt를 사용하고 싶습니다. 페이지로드시 초기화하려고했지만 ctxt에 액세스 할 수 없습니다.

답변

2

일반적으로 생성자 또는 page_load/page_init에서 인스턴스화 할 필드를 선언해야합니다. 당신이 무엇을 만들고 있는지에 따라 최종적으로 자원을 명시 적으로 처리해야 할 수도 있습니다.

public class MyPage 
{ 
    private object myobject = null; 
    public MyPage() 
    { 
     myobject = new Object(); 
    } 
} 

그런 다음 적절하게 다른 클래스로 전달할 수 있습니다. 보다 강력한 무언가가 필요하거나 명시 적으로 통과 할 수 없거나 원하지 않는 다른 객체에서 인스턴스를 사용할 수있는 방법이 필요하다면 IoC 컨테이너를 사용할 수 있습니다. 당신이 리소스 PerWebRequest를 해결하고 인스턴스화하는 데 사용할 수있는 Castles Windsor로서 -하지만 약간의 설정이 필요하고 자체적 인 단점이 있습니다.

+0

것 같습니다. 필요한 정보가 사용자 단위로 제공되는 경우 캐시 개체를 사용하는 것이 현명하지 않을 수 있습니다. 그렇다면 보안 결함이 발생할 수 있습니다. 세션은 더 좋지만 어디에서나 액세스 할 수 있습니다. ViewState는 요청간에 정보를 저장하는 데 사용할 수 있지만 페이지 가중치를 추가하므로 신용 카드 세부 정보와 같이 중요한 정보 (예 : 브라우저 캐시에 암호화 됨)에 사용하면 안됩니다. viewstate 이외의 모든 요청 사이의 초기화를 관리해야합니다. – Mark

2

대신 시도 - 당신은 단지뿐만 아니라 요청과 페이지의 생활을하고자하지 않는 것처럼

public partial class YourPage : System.Web.UI.Page 
{ 
    XTContext.UserContext UContext; 
    XTContext.Context ctxt; 
    XTErrorCollection.ErrorCollection eContext; 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     UContext = new XTContext.UserContext(); 
     ctxt = new XTContext.Context(); 
     eContext = new XTErrorCollection.ErrorCollection();      

     ctxt = (XTContext.Context)Cache["sessionfContext"]; 
     ctxt.eContext = eContext; 
     ctxt.uContext = UContext; 
    } 
} 
+0

페이지가 포스트 백으로 이동하면 값이 다시 null로 초기화됩니다. 다른 방법 –

+0

페이지가 포스트 백인지 확인하고 값을 초기화하십시오. if (! IsPostBack) {// some code} – pavanred

관련 문제