0

나는 문자 그대로 모든 객체가 lastUpdatedBy 속성을 가진 곳에서 내 애플리케이션을 얻었습니다. 여기에 입력 한 정보는 세션 ("사용자 이름") 변수에서 검색된 사용자의 사용자 이름입니다.일련의 생성자를 사용하지 않고 세션 데이터를 클래스 라이브러리에 전달 하시겠습니까?

어떻게이 데이터를 클래스 라이브러리의 DAL에 전달할 수 있습니까?

는 처음에는 단지 각각의 방법으로 값을 전달했지만, 이것은 내가 때마다이 메소드가 호출 될 때 그렇게 할 이유가 없을 것 생각 말도 안돼.

그럼 난 그냥 훨씬 쉽게 만들 것이다는 DAL 관련 각 클래스에 대한 생성자에 넣어 경우도 생각했다.

은 그러나, 여전히 특정 페이지에서, 나는 모든 단일 라인은 내가 문자열로 캐스트 세션 이름에 전달해야하는 새로운() 선언의 과다를 가지고있다.

내가 한 곳에서만이를 선언 할 수 있도록이 일을 더 여전히 더 효율적인 방법이 있나요, 모든 것이 그것이 무엇인지 알 수 내가 클래스 라이브러리의 클래스에 전달할 수 있습니까?

답변

1

여러 가지 방법이 있습니다.

하나는 세션에서 값을 가져 오는 클래스입니다. Session.Current.Username과 마찬가지로 현재는 세션 인스턴스를 반환하는 정적 속성이고 Session은 Session의 단순 속성입니다.

또 다른 하나는 의존성 주입을 사용하는 것입니다. 생성자 (여전히 간단한 값 대신 클래스)에 입력 값을 여전히 갖고 있지만, 코드에 명시 적으로 전달할 필요는 없습니다.

+1

여기에 귀하의 첫 번째 점을 입증하는 좋은 링크는 다음과 같습니다 http://www.codeproject.com/KB/aspnet/session_facade.aspx – derek

+0

를 당신은 당신의 두 번째 제안의 예를 제공 할 수 있을까요?나는 클래스 라이브러리가 세션을 사용할 수 없기 때문에 이것을 어떻게 할 것인지 혼란 스럽다.하지만 나는 의존성 주입을했다. 내 DAL 클래스에 하나의 매개 변수, 세션 변수에 내 DAL 클래스의 일부 변수를 설정하는 세션 변수를 반환하는 클래스와 생성자를 가질 것이라고 지금 당신이 값 대신 클래스를 사용하지만, 어떻게 이것이 가능하다 ? 그것은 여전히 ​​세션에 액세스 할 수없는 클래스 라이브러리의 클래스입니다. – SventoryMang

+0

@ sah302 나는 당신이 묘사 한 것과 같은 수업을 주입하는 것을 의미했다. (즉, 그 끔찍한 것이지만, 대신 리터럴 문자열 값을 주입 할 수있다.) DAL에서 인터페이스를 선언하면 DAL에 필요한 것을 설명하고 실제 구현은 DAL에 포함되지 않습니다. 컨텍스트/세션에 대한 액세스 권한이있는 상위 계층에서이를 구현할 수 있습니다. – eglasius

-1

은 내가 string Username 속성을 포함하는 AbstractDALObject 추상 클래스를 만들 것이다. 모든 DAL 클래스를이 추상 클래스에서 파생시키고이 속성을 설정하는 DALFactory 클래스를 만들어 인스턴스화합니다. 귀하의 DALFactory 클래스는 DAL의 각 유형에 대한 CreateXXXDAL 방법을 포함하는 것 중 하나, 또는 당신은 아래와 같은 일반적인 방법을 만들 반사를 사용할 수 있습니다

private HttpSessionState m_Session = null; //set in constructor 

    T CreateDAL<T>() where T : AbstractDALObject { 
     Type t = typeof(T); 

     //fetch a zero-param constructor 
     //you could change the argument types if you have a 
     //standard for the class 
     ConstructorInfo ctor = t.GetConstructor(new Type[0]); 

     T myDAL = (T) ctor.Invoke(new object[0]); 
     myDAL.Username = m_Session ("Username"); 

     return myDAL; 
    } 
+0

클래스 라이브러리 프로젝트가 Session을 사용할 수 없기 때문에 위의 코드는 작동하지 않습니다. – SventoryMang

+0

팩토리 객체가 호출 페이지에서 설정된 HttpSessionState 유형의 private 변수를 갖습니다. 또 다른 옵션은 세션 상태 객체를 메서드의 매개 변수로 만드는 것입니다 (이 메서드를 정적으로 만들 수 있습니다). 귀하의 투표를 재검토하십시오. 귀하의 투표가 매우 효과가있는 해결책을 제시 할 것이라고 생각합니다. – cortijon

+0

나는 당신에게 부정적인 표를주지 않았다. <. – SventoryMang

0

나는 일반적으로 그 Thread.CurrentPrincipal 참조 현재 연결된 사용자를 확인하기 위해 조치를 취할 것입니다. 이는 경우에 따라 자동으로 수행됩니다

  • 은 ASP.NET으로 roleManager

  • = "UseAspNetRoles"

principalPermissionMode를 사용하여 IIS에서 호스팅되는 WCF 서비스를 사용하는 ASP.NET 응용 프로그램

다른 경우에는 직접해야 할 수도 있습니다 (예 : WinForms 응용 프로그램 시작시).

DAL은 현재 Thread.CurrentPrincipal.Identity.Name을 사용하여 현재 사용자를 식별 할 수 있습니다.

이것은 HttpSessionState을 사용하는 것보다 깔끔하며 ASP.NET에 종속되어 있음을 나타냅니다.

관련 문제