최신 버전의 SimpleInjector는 MVC와 WebApi를 구분합니다. 같은 요청에 대해 두 개의 요청 등록 별칭이 있습니까? 아니면 기본적인 차이점이 있습니까?SimpleInjector RegisterWebApiRequest 대 RegisterPerWebRequest
감사
최신 버전의 SimpleInjector는 MVC와 WebApi를 구분합니다. 같은 요청에 대해 두 개의 요청 등록 별칭이 있습니까? 아니면 기본적인 차이점이 있습니까?SimpleInjector RegisterWebApiRequest 대 RegisterPerWebRequest
감사
생활 양식 및 범위를 구현 SimpleInjector 2.5 WebRequest
WebApiRequest
와는 다른 기술에 기초한다.
WebApiRequestLifestyle
은 IIS 내부와 외부 모두에서 잘 작동하는 ExecutionContextScopeLifestyle
에서 파생됩니다. 나는. HttpContext.Current
이없는 자체 호스팅 WebAPI 프로젝트에서 작동 할 수 있습니다. WebApiRequestLifestyle
에서 사용하는 범위는 ExecutionContextScope
입니다. 이름에서 알 수 있듯이 ExecutionContextScope
은 논리적 호출 컨텍스트에 자신을 등록하고 스레드간에 async
작업으로 이동합니다 (예 : await
은 ConfigureAwait()
이 true
또는 false
과 함께 사용되었는지 여부에 관계없이 다른 스레드의 범위에 계속 액세스 함).
대조적으로 WebRequestLifestyle
의 인스턴스는 HttpContext
내에 저장됩니다. HttpContext
은 IIS에서 호스팅 될 때 WebAPI와 함께 사용할 수 있지만 현재 HttpContext
이 IllogicalCallContext
(Understanding SynchronizationContext in ASP.NET 참조)에 저장되어 있기 때문에 항상 실행 컨텍스트와 함께 흐르지 않으므로주의해야합니다. await
을 ConfigureAwait(false)
과 함께 사용하면 async-op가 동 기적으로 실행되지 않을 때마다 연속으로 원래 HttpContext
의 흔적을 잃을 수 있습니다. 이것의 직접적인 영향은 컨테이너 (예 : 컨테이너에 액세스 할 수있는 팩토리)에서 WebRequestLifestyle
으로 이전에 생성 된 서비스의 인스턴스를 더 이상 확인할 수 없으며 HttpContext.Current
이 될 수 있으므로 예외가 발생합니다. null
.
WebAPI 컨트롤러에 주입되는 서비스 인 '웹 API 요청 별'서비스에 WebApiRequestLifestyle
을 사용하는 것이 좋습니다. WebApiRequestLifestyle
는 다음과 같은 이점을 제공합니다 :
async
메서드는 ASP.net SynchronizationContext
에 국한되지 않기 때문에 사용할 수 있습니다.difference between ExecutionContext
and SynchronizationContext
에 관한 Stephen Toub의 블로그 항목을 확인하십시오.
+1. 나는 더 나은 자신을 설명 할 수는 없었을 것입니다. 아마 당신의 대답을 Simple Injector Wiki에 직접 복사 할 것입니다. – Steven
고마워,이게 내가 원하는거야. – Tris
MVC 컨트롤러와 WebAPI 컨트롤러에 모두 주입되는 서비스는 무엇입니까? 현재 PerWebRequest를 사용하는 모든 서비스에 대해 PerWebApiRequest를 사용하는 것이 안전합니까? – sheamus