이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 20252|회답: 1

[출처] autofac 컴포넌트의 인스턴스 범위

[링크 복사]
게시됨 2018. 9. 14. 오후 1:22:21 | | | |
인스턴스 범위는 요청 간 서비스 공유 방식을 결정합니다.

원본 주소:http://docs.autofac.org/en/latest/lifetime/instance-scope.html

종속 하나당 한 인스턴스

이 옵션을 사용하면 서비스가 요청될 때마다 새로운 인스턴스가 반환됩니다. InstancePerDependency()를 사용하세요. 이것이 기본 옵션입니다. 아래 코드, 2행과 3행은 동일합니다.

다음 코드는 각 루프마다 새로운 인스턴스를 생성하여 총 100개의 인스턴스를 생성합니다.

단일 인스턴스

이 옵션을 사용하여 루트 스코프 또는 중첩된 스코프 중 어느 쪽이든 서비스를 요청하며, 두 경우 모두 동일한 인스턴스를 반환합니다. SingleInstance()를 사용해 명시하세요.


아래 코드인 w1과 w2는 항상 동일한 객체이며, Worker 클래스는 100회 루프 중 단 하나의 인스턴스만 존재합니다.


라이프사이클 범위당 한 인스턴스

이 옵션을 사용하여 특정 ILifetimeScope에서 서비스를 요청하며, 단 하나의 인스턴스만 반환합니다. InstancePerLifetimeScope()를 사용하세요. 다음 코드에서 scope1의 100번 w1은 동일한 객체이고, scope2의 100번 w2는 같은 객체지만 w1과 w2는 동일하지 않습니다.


일치하는 라이프사이클 범위당 한 인스턴스

위의 [라이프사이클 스코프당 한 인스턴스]와 비슷하지만, 더 많은 제어가 가능합니다. 이 옵션을 사용하여 ILifetimeScope 객체에 태그가 제공되도록 하세요. 태그 매치 범위 내에는 단 한 번의 인스턴스만 있습니다. InstancePerMatchingLifetimeScope() 메서드를 사용하세요.

아래 코드에서 w1과 w2는 동일하며, w3와 w4는 동일하지만 w1과 w3는 다릅니다.

파싱 시 적절한 마크업이 제공되어야 하며, 다음 코드는 예외를 던집니다.

요청당 한 인스턴스

일부 애플리케이션은 MVC나 WebForm 애플리케이션과 같이 자연스럽게 요청 의미론 ASP.NET 가지고 있습니다. [요청당 1인스턴스]는 [매칭 라이프사이클 범위당 1인스턴스]를 기반으로 스코프 마커, 등록 함수, 공통 타입 통합을 제공함으로써 구현됩니다. 본질적으로, [매치되는 라이프사이클 범위당 한 인스턴스]입니다.

ASP.NET Core는 요청당 하나의 인스턴스가 아니라 하나의 인스턴스를 라이프사이클 범위당 사용합니다.

소유된 개체당 한 인스턴스

소유된<T> 암묵적 연관 유형은 중첩된 라이프사이클 범위를 생성합니다. 인스턴스별 소유 등록을 통해 의존성을 소유된 인스턴스로 제한할 수 있습니다.

이 경우 ServiceForHandler 서비스는 MessageHandler 인스턴스의 범위로 제한됩니다.


나사산 범위

Autofac은 스레드 A의 객체들이 스레드 B의 의존성을 만족하지 않도록 강제할 수 있습니다.

그리고 각자 평생 범위를 만들게 하죠

중요: 멀티스레드 시나리오에서는 부모 범위 정리를 피해야 합니다.그렇지 않으면 파생 스레드의 서브스코프가 서비스를 해결할 수 없습니다.

각 스레드는 본질적으로 라이프사이클 범위의 싱글톤인 MyThreadScopedComponent의 자체 인스턴스를 가지게 됩니다. 범위 내 인스턴스는 외부에서 제공되지 않기 때문에, 구성 요소를 스레드 간에 격리시키는 것이 쉽습니다.

ILifetimeScope 매개변수를 추가하면 부모 범위를 스레드를 생성하는 코드에 주입할 수 있고, Autofac이 현재 범위를 자동으로 주입하여 중첩된 스코프를 생성할 수 있습니다.

더 깊이 제어하고 싶다면, [매칭 라이프사이클 범위당 하나의 인스턴스]를 사용하여 스레드 범위 구성 요소를 내부 라이프사이클 범위와 연결할 수 있습니다. 그림에 나타난 것처럼:



다이어그램의 "Context"는 BeginLifetimeScope 메서드가 생성한 라이프사이클 범위를 의미합니다.





이전의:프론트엔드 마우스 클릭 효과: 자유, 민주주의, 번영
다음:{&quot;error_msg&quot;: &quot;IAM 인증 실패&quot;}
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com