2009-12-11 6 views
2

Unity와 WPF를 사용하는 동안 약간의 문제가 발생했습니다. 시나리오는 MVVM 디자인 패턴을 따르는 WPF 응용 프로그램입니다. A ViewKDI라는 모듈이 있습니다. 이 모듈에는 ViewKDIService라는 서비스가 있고 ViewKDIService 서비스는 UserService라는 다른 서비스를 사용합니다.새로운 서비스 인스턴스를 반환하는 Unity

모듈을로드 할 때마다 ViewKDI는 ViewKDIService와 UserService의 새로운 인스턴스를 반환합니다.

나는 쉘 부트 스트 래퍼의 아래에 넣어 가지고 :

Container.RegisterType<IUserService, UserService>(); 

을 나는 다음을 넣어 한 ViewKDI 모듈에서 :

Container.RegisterType<IViewKDIService, ViewKDIService>(); 

할 때마다 ViewKDI 모듈은 ViewKDIService 생성자가 호출로드합니다. 그러나 UserService 생성자는 처음에만 호출됩니다. 즉, UserService의 새 인스턴스를 가져 오지 못합니다.

나는이 세션을 나머지 응용 프로그램과 별도로 관리 할 수 ​​있도록 UserService의 새로운 인스턴스를 제공해야합니다.

아이디어가 있으십니까? 파이

+0

각 유형을 해결할 때 자세한 정보를 제공 할 수 있습니까? IUserService는 ViewKDIService의 의존성입니까? –

+0

나는 명시 적으로 resolve를 호출하지 않고있다. 나는 인터페이스를 ViewModel의 생성자에 넣었고 Unity가이를 해결하도록했다. IUserService는 IViewKDIService에 종속되지 않습니다. – Faisal

+0

IUserService와 IViewKDIService가 어떤 객체에 삽입되어 있는지 확인하는 것이 도움이 될 것입니다. 예를 들어, 모두 ViewModel에 삽입되거나 그냥 IUserService에 삽입됩니까? –

답변

2

유니티의 기본 동작은 각각의 새로운 인스턴스를 생성하는 것입니다

덕분에이 동작을 볼 수있을해서는 안 때마다 하나, 요청 객체.

소스 코드 및 MSDN 설명서 (this은 좋은 읽기)에서 수집 할 수있는 내용을 통해 유형을 등록 할 때 형식을 구성하고 캐시하는 방법을 알리는 형식을 등록 할 때 "수명 관리자"개체를 지정할 수 있습니다. TransientLifetimeManager (기본적으로 캐싱을하지 않음)를 사용하면 Unity가 매번 클래스를 다시 생성하게됩니다. 따라서 이것을 시도하십시오 :

Container.RegisterType<IUserService, UserService>(new TransientLifetimeManager()); 

... 그리고 매번 새로운 UserService를 생성하는지 확인하십시오.

+0

감사합니다. – Faisal

관련 문제