2017-12-05 5 views
0

내 프로젝트에서 종속 삽입 컨테이너로 Autofac을 사용하고 있습니다. 나는 그 객체가 요청보다 오래 머물러 있기를 원하지 않으므로 InstancePerRequest 범위를 사용하고 싶습니다.Autofac InstancePerRequest 범위 - 범위 인스턴스를 다른 곳으로 다시 사용

다음은 게이트웨이 클래스에서 사용하고있는 코드로 각 요청이 통과하는 코드입니다.

 using (var scope = _container.BeginLifetimeScope(MatchingScopeLifetimeTags.RequestLifetimeScopeTag)) 
     { 
      var service = scope.Resolve<MyTestService>(); 
      ... 
     } 

지금 내 코드에서 나는 메시지 No scope with a Tag matching 'AutofacWebRequest'과 예외의 원인이되는 순간에 MyTestService를 해결해야 할 몇 가지 다른 클래스를 찾습니다. 예외는 위의 그림과 같이 container 인스턴스에서 해결을 호출하는 반면 동일한 scope 인스턴스에서 resolve를 호출해야하기 때문입니다.

내 코드의 해당 위치에서 동일한 scope 인스턴스에 어떻게 액세스 할 수 있습니까? 모든 수업에서 BeingLifetimeScope으로 전화를 걸 수는 없습니다.

+0

[읽었습니까?] (http://autofac.readthedocs.io/en/latest/faq/) per-request-scope.html) –

+0

예 읽었지만 여러 위치에서 액세스해야 할 때 '범위'인스턴스를 어디에 그리고 어떻게 유지해야하는지 알려주지 않습니다. –

답변

0

불행히도 저는 전화가 끊어져 집이 리모델링되어 컴퓨터에 액세스 할 수 없습니다. 따라서 코드없이 짧은 답변을 얻을 수 있지만 문제가 발생합니다.

당신은 당신이 알아야 할 있도록, 워드 프로세서를 읽었 말 :

  • 당신이 현재 요청의 범위와 동일하지의 그 사용하여 블록의 범위를 만들 때.
  • 서비스가 기존 요청에서 사용되는 경우 범위가있는 서비스 위치가 아닌 생성자에 서비스가 필요한 것을 주입해야합니다.
  • 서비스가 기존 요청에서 사용되지 않는 경우 서비스 관련 요청을 모방하는 방법을 알아 내려고합니다. 특정 앱이므로 문제를 해결할 고정 된 방법이 없습니다.
  • 요청 범위를 필요로하는 요점은 요청 외의 요청을 해결하기 위해 요청 당 등록 된 종속성을 얻는 것이라면 수명주기 범위 당 인스턴스로 전환해야합니다.
  • 반 패턴이지만 반드시 필요한 경우 ILifetimeScope 인 서비스에 생성자 매개 변수를 넣을 수 있습니다. 그러면 현재 스코프가 주입됩니다.

귀하의 질문에 을 말하면 실제로 가능하지 않습니다. 범위가 필요합니다. 나는 당신이하고 싶은 것을 할 수있는 더 좋은 방법이있을 것이라고 생각하지만 내 전화에 붙어있어 실제로 할 수있는 일을 해결할 수있는 백만 가지 가능성과 방법을 확장 할 수는 없습니다. 앞으로 질문 할 때 컨텍스트에 대해 더 자세히 설명해보십시오. 즉, 서비스가 "게이트웨이"를 통과해야하는 이유와 컨스트럭터 매개 변수를 주입하고 Autofac 통합을 통해 무거운 짐을 들일 수있는 상황이 아닌 이유입니다.

아무튼이 문제는 풀리지 않습니다. 그렇지 않다면 추가 컨텍스트를 사용하여 질문을 명확히해야합니다. 다른 사람이 들어올 수도 있습니다.