2017-12-08 5 views
0

다른 서비스에 의존 Prism.Unity에서 서비스의 인스턴스를 등록과 같이 내 유니티 컨테이너에 내가 등록하는 것이, 내가위한 인증 서비스를

Container.RegisterInstance<IAuthenticationService>(new AuthenticationService()); 

내 문제는 내 AuthentificationServiceINavigationService에 의존한다는 것입니다 그리고 생성자 인수로이 소요 :

public AuthenticationService(INavigationService navigationService) 

을 내 이해에서, 유니티 컨테이너는 INavigationService 구현을 주입하기위한 책임이 있습니다. 하지만이 경우 AuthenticationService 인스턴스를 제공하고 있으므로 Unity에 내 을 내 AuthentificationService implementation에 삽입하도록 어떻게 지시 할 수 있습니까?

+0

업데이트 된 서식을. –

+0

왜 인스턴스를 등록해야합니까? 유형을 등록한 경우, 단일 요소는 필요한 종속성을 생성자에 주입합니다. – Haukinger

+0

그건 사려 깊은 선택이 아니기 때문에 IOC과 Unity를 처음 접했기 때문에 효과가있는 첫 번째 솔루션을 선택했습니다. 그런 경우 인스턴스에 대해 유형을 등록 할 때 이점이 있다고 생각합니까? – Toto

답변

1

처음에는 new을 제거하기 위해 단일성과 같은 DI 컨테이너를 사용합니다. 그래서 인스턴스를 등록하는 일은 강요 당한다면 최후의 수단이 될 것입니다.

일반적으로, 당신은 컨테이너에 방법를 떠나 만들 연합 무엇을 말하는 유형을 등록 할 수 있습니다. 그것은 AuthenticationService 인스턴스를 생성에 관해서

당신은

Container.RegisterType<IAuthenticationService, AuthenticationService>(new ContainerControlledLifetimeManager()); 

를 작성해야, 단결 모든 생성자 매개 변수를 해결하기 위해 노력하고 INavigationService 당신의 AuthenticationService에 전달합니다 :

internal class AuthenticationService 
{ 
    public AuthenticationService(INavigationService navigationService) 
    { 
     // here you've got the Navigation Service... 
    } 
} 
1

당신이하려는 것은 지원되지 않습니다. 탐색이 제대로 작동하려면 Prism의 NavigationService가 현재 페이지를 이해해야합니다. ViewModelLocator는 이것을 처리하고 적절한 서비스 인스턴스를 주입합니다.

이 시나리오를 처리하는 더 좋은 방법은 인증 결과를 반환하고 올바르게 구성된 인스턴스 INavigationService을 사용할 수있는 ViewModel에서 그 결과를 처리하는 방법을 결정하는 것입니다.

+0

좋아요, 그 말이 맞습니다. 저는 DryIoc 프레임 워크를 사용하는 샘플 프리즘 응용 프로그램과 동일한 메커니즘을 구현하려고했지만 Unity를 사용하여 수행 할 수없는 방법을 봅니다. 인증 서비스에서 결과를 반환하고 ViewModel에서 처리합니다. – Toto

관련 문제