2017-12-08 8 views
0

に依存しているPrism.Unityにおけるサービスのインスタンスを登録しますので:私の問題は私のAuthentificationServiceINavigationServiceに依存しているということである私は同じように私ユニティコンテナに登録することを、私は真偽サービスを持っている別のサービス

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

、およびそのコンストラクタは、引数としてこれを取る:

public AuthenticationService(INavigationService navigationService) 

を私の理解から、ユニティコンテナがINavigationService実装を注入するための責任があります。しかし、この場合はAuthenticationServiceインスタンスを提供していますので、Unityにを私のAuthentificationService implementationに挿入するように指示するにはどうすればよいですか?

+0

更新フォーマット。 –

+0

なぜインスタンスを登録する必要がありますか?型を登録した場合、1は必要な依存関係をコンストラクタに挿入します。 – Haukinger

+0

それは思慮深い選択ではありません。私はIOCとUnityの初心者ですから、最初の解決策を選択しました。この場合、あるタイプをインスタンスに登録する利点があると思いますか? – Toto

答えて

1

最初は、newを取り除くために、1つのようなDIコンテナを使用します。インスタンスを登録することは、強制された場合、最後の手段となります。

通常は、あなたがコンテナに方法を残して、作成するために団結を言って、種類を登録したいです。

あなたはそれがAuthenticationServiceインスタンスを作成するとなると、Unityはすべてのコンストラクタのパラメータを解決しようとすると、あなたのAuthenticationServiceINavigationServiceを渡します

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

を書く必要があります。

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

あなたがしようとしていることはサポートされていません。ナビゲーションが正しく動作するためには、PrismのNavigationServiceには現在のPageを理解する必要があります。 ViewModelLocatorはこれを処理し、サービスの適切なインスタンスを挿入します。

このシナリオを処理するより良い方法は、認証結果を返し、正しく構成されたインスタンスINavigationServiceを使用できるViewModelでその結果を処理する方法を決定することです。

+0

申し訳ありませんが、私はDryIocフレームワークを使用するサンプルPrismアプリケーションと同じメカニズムを実装しようとしていましたが、Unityを使ってどのように行うことができないかを見ています。認証サービスで結果を返し、ViewModelで処理します。 – Toto

関連する問題