2017-08-23 37 views
0

私のWeb APIプロジェクトには単純なインジェクタを使用しています。私はそれがインスタンス化するためにセッショントークンを必要とするサービスを持っています。ランタイムデータとの依存関係を解決するための依存性注入

public class CustomerService 
{ 
    public CustomerService(Auth auth, IRepositoryFactory repositoryFactory) 
    { 
     // make post call to another web api for validation 
     SomeWebApiCallToValidateAuth.vaildate(auth); 
    } 
} 

このサービスでは、認証トークンとrepositoryFactoryが必要です。私はそれが(httpのWeb要求から来る)authパラメータを注入し、コンテナに登録された特定の実装されたthatsを持つリポジトリファクトリを解決するために同時にできるようにします。

しかし、私はこれを簡単なインジェクタに登録する方法やその周りに道があるかどうかはわかりません。どんな助けも素晴らしいだろう。ありがとう。

+0

なぜこのサービスの工場もありませんか?そこにリポジトリファクトリを注入し、ランタイムデータを含むメソッドを呼び出します。他の選択肢は、懸念の分離を検査することです。その質問には十分な情報がありませんので、私はその方向であなたを指摘することはできません。 – krillgar

+0

サービスでは、トークンをパラメータとして取得するメソッドが必要です。現在のアプローチでは、検証が失敗し、制御フロー全体が壊れると、オブジェクトの初期化は失敗します。あなたがまだこのアプローチを進めたいのであれば、DIコンテナがそのトークンを読み込んでサービスを初期化するようにトークンをいくつかの場所に置く必要があります。どのDIコンテナにそのサポートがあるかわからない –

答えて

2

あなたの現在のアプローチは、いくつかの欠点があります。

工場について:IRepositoryFactoryではなくIRepositoryを注入してください。これは、hereのように、プロキシの背後にある実際のリポジトリを隠す必要があるかもしれません。 Auth値に関して

、それは必要性に依存するが、Auth値はCustomerServiceAPIの重要な一部である場合、これはCustomerServiceのメソッドに引数としてAuthを追加する正当化しています。実装の詳細であれば、IAuthProviderの抽象メソッドを挿入して、実行時に(オブジェクトグラフの作成後に)値を取得できるようにします。ここでも、これはすべてthis articleに記載されています。

関連する問題