우리는 비동기 요청을 처리하는 몇 가지 WCF 서비스를 만들었습니다. 우리는 basicHttpBinding
을 사용하고 있습니다. 따라서 InstanceContextMode
은 PerCall
이며 약간 혼동을 일으키는 원인이됩니다. Microsoft의 Unity
컨테이너를 사용하여 주입되는 응용 프로그램의 부분에서 비정상적인 동작이 나타납니다.WCF 서비스 내 IoC 충돌
응용 프로그램 전체에서 사용되는 Foo
의 싱글 톤을 만들기 위해 아래 참조를 해결합니다. 그러나 서비스가 빠르게 연속해서 실행될 때 Foo
은 가끔씩 여러 스레드에서 액세스하고 그 결과 상태가 예상치 못한 방식으로 변경되었음을 나타내는 예외를 throw합니다. 우리가 TransientLifetimeManager
에 수명 관리자를 변경하는 경우
Container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());
는 지금 - 기본적으로 클래스가 해결 것마다의 새로운 인스턴스를 주입 컨테이너를 말하는 문제가 수정됩니다.
Container.RegisterType<IFoo, Foo>(new TransientLifetimeManager());
제 생각에 WCF는 AppDomain의 수명을 제어하지 않습니다. 호스트는 않습니다. 여기서는 IIS입니다. 따라서이 정보를 통해 PerCall
WCF 요청이 올바르게 작동 할 수 있지만 AppDomain 관리 방법으로 인해 singleton 구현으로 인해 동일한 주입 된 개체에 액세스 할 수 있습니까?
시간 내 주셔서 감사합니다.
유니티는 IInstanceProvider 동작 내에서 생성하거나 다른 방법으로 종속성을 주입한다 : 이것은 매우 잘 작동? – ErnieL