2011-03-19 2 views
2

에서 상속 된 클래스가 있습니다. ID 위치는입니다. 내 수업에서 HttpContext에 액세스하는 가장 좋은 방법은 무엇입니까? HttpContext를 사용할 수있게되면 가능한 한 빨리 액세스하려고합니다. 요청 범위가 적용된 클래스에서 HttpContext를 액세스 중입니다.

나는 내 수업에 IWorkContextAccessor 에 대한 의존성 주입을 추가하고 생성자에서 액세스하려고했으나 는 getContext() 반환 후 .

답변

1

현재 HttpContext를 사용하면 생성자 사람들을 액세스 할 수 없습니다 있도록 IoC 컨테이너 객체가 생성 얻을 IWorkContextAccessor 객체를 통해 사용할 수 있습니다. 가장 좋은 방법은 컨텍스트 객체에 액세스 할 때입니다. 이전에는 사용하지 않았습니다. 특히 이 아니라이 컨스트럭터 내에 있습니다. 생성자는 Autofac에서 매우 일찍 호출됩니다.

또한 IOrchardServices 객체 를 주입 할 수있는 services.WorkContext.HttpContext 개체를 사용하여 다음과 (의는 "서비스"를 부르 자).

달성하고자하는 목표에 좀 더 자세하게 설명해 주시겠습니까? 왜 그렇게 빨리 접근하고 싶습니까? 컨텍스트 객체가 나중에 사용되도록 다시 작성할 수 없습니까 (예 : 일부 메소드 호출에서)?

HTH

+0

내가 뭘하려고 노력했는지에 대해 좀 알려주게. ** DefaultCultureManager ** 클래스를 사용자 정의하고 있습니다. 의도는 문화 선택 로직을 ** GetCurrentCulture ** 메소드에서 ** HttpContext **가 사용 가능할 때 한 번만 호출되는 다른 개인 메소드로 이동시키는 것입니다. 이유는 ** GetCurrentCulture ** 메서드가 너무 자주 호출되기 때문입니다. ** BeginRequest **와 같은 응용 프로그램 수준 이벤트를 집계하고 ** DefaultCultureManager **에서 액세스 할 수 있지만 아무 것도 찾지 못한 구성 요소를 찾았습니다. –

+1

** GetCurrentCulture ** 메서드가 호출 될 때마다 현재 문화권을 검색하면 성능에 미치는 영향을 최소화 하시겠습니까? 가장 좋은 옵션은 선명도와 모범 사례 측면에서 ** ICacheManager **를 통해 캐싱을 사용하는 것입니다. 메서드가 처음 호출되면 이후의 호출에서 캐시가 만들어지고 검색됩니다. Afaik에는 "라이프 사이클"이벤트에 쉽게 연결할 수있는 방법이 없지만 팀에서 작업 할 것입니다 (이러한 기능의 필요성은 몇 번 언급되었습니다). –

+0

아주 좋은 설명, 너무 많은 시간을 절약 검색. –

관련 문제