문제

내 논리와 데이터 액세스 항목이 모두 포함된 DLL 프로젝트와 양식 등을 수행하는 ASP.NET 프로젝트라는 두 개의 프로젝트가 있습니다.

나는 조금 혼란스러워요.DLL 프로젝트에 System.Web 네임스페이스 참조를 추가하면 ASP.NET 페이지의 세션 상태 정보를 참조할 수 있을 것이라고 생각했습니다.

각 페이지를 사용하여 세션 정보를 가져오고 처리를 위해 DLL에 전달할 수 있지만 DLL 클래스에서 직접 처리할 수 있기를 바랍니다.

이것이 가능한가?

System.Web 네임스페이스를 조작해본 결과 Session 변수에 대한 참조를 얻을 수 있는 것 같습니다.

모두 감사합니다.

도움이 되었습니까?

해결책

HttpContext.Current.Session을 사용할 수 있어야 합니다.

편집하다

그렇습니다. Business Logic DAL 또는 기타 어셈블리를 ASP.Net 세션에 긴밀하게 연결해서는 안 된다는 데 동의합니다.웹 프로젝트 외부에서 HTTP 컨텍스트에 액세스하는 유효한 사례가 많이 있습니다.

웹 컨트롤은 아마도 재사용 가능한 http 모듈 등 최고의 예 중 하나일 것입니다.

이제 DLL이 세션에서 항목을 가져오도록 하려면 한 가지 옵션은 세션을 추상화하는 것입니다.따라서 라이브러리에서 사용 방법을 알 수 있도록 IStorage와 같은 인터페이스를 정의할 수 있습니다.그런 다음 SessionStorage 또는 MemoryStorage 클래스를 갖고 IoC를 사용하여 적절한 클래스를 라이브러리 클래스에 삽입할 수 있습니다.이를 통해 코드를 세션에 묶지 않고도 원하는 대로 코딩할 수 있습니다.아, 그리고 제대로 수행되면 코드를 웹 세션에 묶지 않아도 된다는 또 다른 이점이 있습니다.

다른 팁

어셈블리가 세션 범위에 로드되어 있는 한 액세스할 수 있습니다.

이러한 유형의 긴밀한 결합은 실제로 권장되지 않습니다.

DLL에서 언제든지 HttpContext.Current.Session을 사용할 수 있지만 이는 나쁜 습관으로 간주됩니다.더 나은 접근 방식은 세션을 참조하는 대신 세션 사전에 저장된 값을 DLL에 전달하는 것입니다.얻을 수 있는 또 다른 이점은 DLL의 코드가 ASP.NET 런타임에 연결되지 않아 테스트하기가 더 쉽다는 것입니다.

다른 사람들이 말했듯이 DLL에서 항상 HttpContext.Current.Session을 사용할 수 있습니다. 나는 이것이 BAL이라고 가정하지만 정말 조심해야 합니다.나중에 Windows 서비스나 HTTPContext가 없는 다른 앱에서 DLL을 사용하면 어떻게 되나요?이 작업을 수행할 때마다 항상 try catch 블록에서 HttpContext.Current.Session에 액세스하려는 시도를 래핑하는 속성 가져오기 메서드에 있었고 문제가 발생하면 db에서 필요한 데이터를 다시 가져옵니다.

dll이 웹 애플리케이션과 함께 항상 실행되지는 않으므로 HttpContext.Current.Session을 사용하지 마십시오.Windows, Console itc와 같은 다른 응용 프로그램과 함께 실행할 수 있습니다.

ASP.Net 응용 프로그램을 사용하는 경우 세션 값을 형성하는 매개 변수를 실제로 허용하는 메서드를 사용하는 것이 더 좋습니다. 그렇지 않으면 응용 프로그램에 대한 종속성이 없습니다.DLL 프로젝트가 이미 개발되었고 기존 비즈니스 로직을 수정하려는 경우 기존 메서드를 수정하지 말고 오버로드 메서드를 사용하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top