2

シンプルインジェクタから依存性インジェクションを使用しました。今私はプロパティ注入を実装しようとしているが、help documentはあまり役に立たない。シンプルインジェクタを使用した静的クラスのプロパティインジェクション

誰も簡単な例でどのようにプロパティ注入作業を説明できますか?

Webプロジェクトの1つのユーティリティクラスで、コントローラではなく、それを使いたいと思います。そのクラスメソッドは静的です。

+0

明確に説明されていないものはありますか?それは、他のいくつかの動作がどのように動作しているのか、なぜデフォルトでは有効にされていないのか、どのように上書きできるのかについて説明しています。あなたのクラスは静的か、あなたは呼び出したいメソッドですか?それがクラスであれば、私はあなたにそれを注入する可能性は見当たりません。コントローラのコンストラクタインジェクションの一部として追加するべきでしょうか? – Icepickle

+0

このメソッドは静的です。そしてそのクラスメソッドはレイアウトから直接呼び出すので、コントローラーは表示されません。 – Dhwani

+2

あなたの質問を更新し、より多くの文脈を提供するとよいでしょう。ユースケースを表示し、依存関係を注入するクラスを表示します。その依存関係が何であるかを記述します。このプロパティをどのように使用するかを示します。 – Steven

答えて

3

これはSimple Injectorではサポートされていないため、スタティックプロパティの挿入方法についての説明はありません。

静的プロパティは、テスト容易性を妨げる原因となるため、通常は好ましくありません。原因はTemporal Couplingであり、Captive Dependenciesになる可能性があります。

静的プロパティが必要な場合は、依存関係を自分で注入する必要があります。すべての登録をコンテナに行った直後に、Composition Rootでそれを行うことができます。

例:

var container = new Container(); 

// Make registrations to container here: 

container.Verify(); 

Utility.MyStaticProperty = container.GetInstance<IDependency>(); 

通常の状態では、単純なインジェクタはLifestyle Mismatchesこれらのタイプを検出しますが、あなたがこのプロパティを自分で注射する際にそうすることはできません。

+0

'静的プロパティが必要な場合は、自分で依存関係を注入する必要があります。すべての登録をコンテナにした直後に、コンポジションルートでそれを行うことができます。 ' – Dhwani

+0

@Dhwani:更新を参照 – Steven

関連する問題