문제

ApplicationState에 구성 객체를 저장하는 WebApp을 받았습니다. 이 개체에는 무엇보다도 데이터베이스에 대한 연결 문자열이 포함되어 있습니다.

때로는 이메일 보내기 및 데이터베이스 업데이트와 같은 몇 가지 더 긴 실행 작업을 수행하기 위해 비동기 스레드를 시작합니다.

그러나이 스레드에는 httpcontext가 없으므로 구성 객체를 얻을 수 없습니다.

나는 모든 것이 httpcontext에 의존한다는이 디자인을 알고 있지만 지금은 너무 늦었습니다. 반사판을 보면 HTTPContext 클래스가 정적 내부 클래스를 사용하여 ApplicationState를 얻는다는 것을 알 수 있습니다. 다른 방법이 있습니까?

.NET의 모든 내부 클래스는 정말 성가신 일입니다.

도움이 되었습니까?

해결책

시작할 때 원하는 것을 스레드에 전달하십시오. a ParameterizedThreadStart 단지 a 대신 시작하도록 대표합니다 ThreadStart 대리자. httpcontext.current를 전달하거나 스레드가 원하는 정보를 함께 묶고 전달할 수 있습니다.

다른 팁

만약 너라면 진짜 비동기 처리기에서 응용 프로그램 상태 (또는 이와 유사)에 대한 액세스가 필요합니다. HttpApplication 응용 프로그램 상태 인스턴스를 저장하려면 서브 클래스 (예 : Global.asax)this.Application) 동안 정적 속성에 Application_Start:

public static HttpApplicationStateWrapper State { get; private set; }

protected void Application_Start()
{
    State = new HttpApplicationStateWrapper(this.Application);
}

이 인스턴스를 등록하기 위해 DI 프레임 워크를 사용하는 것이 더 적절하지만, 사용 가능한 경우 구성을 저장하는 데 응용 프로그램 상태를 모두 피할 수 있습니다. 또한 .NET에는 이러한 요구를 직접 해결하고 어디서나 구성을 읽을 수있는 구성 프레임 워크가 있습니다.

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