2016-10-03 3 views
0

lightinjectを使用する場合、外部設定ファイルの文字列値を使用して、ファイルに記述されているようにサービスを登録するようコンテナに指示する方法はありますか?これはxmlファイルまたはweb.configファイルにあります。lightinjectを使用してxmlファイルまたはweb.configを介して依存関係を解決する

例えば、私のweb.configファイル内の前のプロジェクトの中に私はWebConfigurationManager呼び出して値を得ることができ、以下の行

<add key="PersonRepository.Interface.IPersonRepository" value="PersonRepository.Db.DbRepository, 
    PersonRepository.Db, Version=1.0.0.0, Culture=neutral"/> 

を持っているでしょう。この例では、具体的なクラスPersonRepository.Db.DbRepositoryの名前を文字列として取得し、それを使用して依存関係を解決します。これは私が過去に使った方法ですが、lightinjectで同じことをする方法を理解することはできません。これは可能ですか?

謝罪これはちょっと混乱している場合は、これは依存性注入への私の最初の適切な進出です。

多くのありがとうございます。


もう一度。私は説明したようにメソッドを実装するために数日間試してみましたが、うまくいきません。これを簡単に説明する。

var myString = "hello"; 
Type stringType = Type.GetType(myString); 
container.Register<ICloneable, stringType>(); 

私は、コンパイラからエラーを取得する「stringType」変数であるが、タイプのように使用されます。

ここでさらに読んでください;

How to use typeof or GetType() as Generic's Template?

これは、言語を限定されるようです。すべての考えはどうですか?どうもありがとう。

答えて

1

LightInjectはXMLファイルでは直接動作しませんが、構成マネージャを使用して、タイプ、サービスタイプ、実装タイプの両方にアクセスできる必要があります。その後、Type.GetType(typeName)のような型を使用して型を解決し、そのサービスをコンテナに登録する必要があります。

つまり、コンテナの設定を設定ファイルからコード(コンポジションルート)に移動することを強くお勧めします。サービスと実装型の間のマッピングは、コンパイル後もほとんど変わりません。強く型付けされた構成の利点があります。

+0

私が必要としていたものは、あなたの助けをありがとう。 – Aeptitude

+0

こんにちは。私は説明したようにメソッドを実装するために数日間試してみましたが、うまくいきません。これを簡単に説明する。 var myString = "hello"; タイプstringType = Type.GetType(myString); container.Register (); コンパイラからエラーが発生しました 'stringType'は変数ですが、型のように使用されます。 ここでさらに読んでください。 http://stackoverflow.com/questions/302577/how-to-use-typeof-or-gettype-as-generics-template これは言語に制限があるようです。すべての考えはどうですか?多くのありがとう – Aeptitude

+0

GitHubでこれを続けないのはなぜですか? LightInjectレポに問題を作成します。次に、あなたがしようとしているものを使って別のレポを作成し、そのレポにPRします – seesharper

関連する問題