問題タブ [ioc-container]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 制御の反転コンテナーの制御の反転?
最近、Ninject 1.0 を使用する比較的大きなコントロール ライブラリを Ninject 2.0 に更新して、1.0 で発生したいくつかの問題を解決する必要がありました。アップデートはうまくいき、Ninject 2.0 の方がはるかに速いと思います。
ただし、将来この問題を回避するために、フィールドとプロパティを注入するための独自のインターフェイスを作成しました (これは、現在の Web アプリケーション内で使用したい IOC コンテナーのメソッドを本質的に呼び出します)。これで、私のコントロール ライブラリは特定の IOC コンテナーから独立し、将来その領域での変更が高速化されます。
私は他の誰かが同じことをしたのだろうかと思っていましたか?
達成したことに満足していますが、理想的には更新したいと思います。私のコントロールでは、これらの注入されたフィールドを頻繁に保護されたものとして作成し、そのコントロールのコンストラクターに設定します。
上記の問題は、実際にプロパティを設定するには、すべてのオブジェクトで「ref」を使用する必要があり、プロパティでそれを直接使用できないことです。
私はこれらの線に沿って何かをしたいのですが、それが可能だとは思いません。
コードをすっきりさせる方法や、よりクリーンな方法で動作させる方法について何かアイデアを持っている人はいますか? また、属性を避けたいので、開発者はコントロール内の特定のポイントで変数を挿入することを決定する必要があります。
すべての考えや感情は大歓迎です。
ありがとう
dependency-injection - 他のどのIoCコンテナにIInitializableのような機能がありますか?
以前のプロジェクトでCastleWindsorを使用していて、とても気に入りました。現在のプロジェクトでは、別のIoCコンテナを使用することを検討しています。Castle Windsorは、2007年以降、新しいリリースがなく、バージョン1.0でもないため、商用環境で使用することを正当化することは困難です。
Castle Windsorについて私が気に入っていることの1つは、サービスを実装するだけで、すべての依存関係が設定された後、コンテナーにサービスのInitializeメソッドを呼び出させることができることですIInitializable
。私はこれをよく使いました。コンストラクターインジェクションの代わりにプロパティインジェクションを簡単に実行できるようになり、コードとテストがかなりクリーンアップされます。
代わりにStructureMap、AutoFac、Unity、Spring.Netを見てきましたが、これらのうちSpring.Netだけが同様のものをサポートしており、自動的にInit()
メソッドを呼び出します。残念ながら、Spring.Netは、IoCコンテナーを操作する方法を実際にはサポートしていません(インターフェイス宣言ではなく文字列キーに基づいて挿入するため、自動配線のサポートも制限されています)
私が見たIoCコンテナの同様の機能を見逃しましたか?IoCコンテナの操作方法はどういうわけか間違っていますか?または、IInitializableやInit()のようなものをサポートする他のIoCコンテナはありますか?
dependency-injection - コンストラクターのパラメーターを渡すキャッスル ウィンザー
いくつかのプロパティを持つ IAddress クラスがあります。次に、このインターフェイスを実装する具象型があります。この具象型には、使用できるいくつかの異なるコンストラクターがあります。実行時にこれらのコンストラクターのいずれかにパラメーター値を渡すにはどうすればよいですか? この具象型を複数回再利用し、そのたびにパラメーター値が異なるため、構成ファイルを使用できません。
c# - 依存性注入の解決と単体テスト
アプリケーションを単体テストするときに、依存性注入を学習しようとしていますが、問題が発生しました。
私はコンソールアプリケーションを作成しており、コンテナはMain()で作成および初期化され、get-property
inとして使用できるProgram.Container
ため、アプリケーションのどこからでもを呼び出すことができますProgram.Container.Resolve<..>()
。
私はこのようなServiceValidatorクラスを持っています:
別のクラスで私は使用します
Program.Container.Resolve
セットアップされていないため、ユニットテストで問題が発生するのはこの呼び出しです。
コンテナでresolveを呼び出すのは悪い習慣ですか?ServiceValidatorインスタンスを作成しMain()
てオブジェクトを渡すこともできますが、次のメソッドに渡されるオブジェクトのパラメーターが多くなるため、これはばかげているようです。
したがって、クラス内でResolveを呼び出すことは許容できると思いますが、その場合、コンテナーは単体テスト用に構成する必要があります。どうすればよいですか、コンテナをプログラムクラス以外の場所に移動する必要がありますか?あなたは何をお勧めします?
重要な場合は、UnityとC#を使用しています
ありがとう :-)
java - PicoContainer で動的な依存関係を管理するにはどうすればよいですか?
A と B の 2 つのクラスがあり、B は A に依存しているとします。
単一の PicoContainer で B を解決するのは簡単です。
しかしB
、の変数インスタンスを使用して、セッションごとに の異なるインスタンスが必要ですA
。このようなことを考えています。
上記のコードは、 を要求するときに親コンテナーに要求するsession
ため、機能しません。 はそこにありますが、とその親内でのみ解決され、B
root
B
root
UnsatisfiableDependenciesException.
これを機能させる良い方法はありますか?それとも、これはアンチパターンであり、間違った方法で問題を解決していますか?
dependency-injection - Castle Windsor によるコンテキスト バインディング
別のパラメーターに基づいてサービスのさまざまな実装を返すように Windsor を取得することは可能ですか?
たとえば、Role プロパティを持つ User オブジェクトがある場合、Role の値に応じてこのオブジェクトを異なる方法で水和できるようにしたいと考えています。これを行うために IUserService を使用したいのですが、IoC コンテナーによって決定される IUserService の具体的な実装を持っています。
Ninject はこの機能を「コンテキスト バインディング」として提供していると思いますが、Windsor が独自の解決ロジックを展開せずに提供しているかどうかはわかりません。
c# - Unityで異なるコンストラクターで同じタイプを2回登録する方法は?
同じ型を登録しようとしていますが、2 つの異なるコンストラクターを使用しています。解決しようとすると、2 番目の解決で「依存関係の解決に失敗しました」と表示されます。
私が間違っていることは何ですか?
dependency-injection - 単純な DI コードではなく、なぜ IoC コンテナーが必要なのですか?
私はしばらく依存性注入(DI) を使用しており、コンストラクター、プロパティ、またはメソッドのいずれかに注入しています。制御の反転(IoC) コンテナーを使用する必要性を感じたことはありません。しかし、読めば読むほど、IoC コンテナーを使用するようにというコミュニティからのプレッシャーを感じるようになりました。
StructureMap、NInject、Unity、Funqなどの .NET コンテナーで遊んでみました。IoC コンテナーがどのようにコードに利益をもたらしたり改善したりするのか、いまだにわかりません。
また、同僚の多くが理解できないコードを目にするので、職場でコンテナを使い始めることを恐れています。彼らの多くは、新しい技術を学ぶことに消極的かもしれません。
IoC コンテナを使用する必要があることを納得させてください。仕事で仲間の開発者と話すときは、これらの議論を使用します。
dependency-injection - Castle Windsor1.0RC3とCastleWindsor2.0の違いは何ですか?
私は最近、Castle Windsor 1.0 RC3をたくさん読んで遊んでいて、それが提供する機能が本当に気に入っています。最近2.0がリリースされましたが、当分の間、私は次のしばらくの間RC3でかなり立ち往生しています。それを念頭に置いて、2つのバージョンの明白な違いと、2.0を超える1.0RC3を使用する場合の落とし穴とそれぞれの回避策を教えてください。さらに、これらの違い/落とし穴のいずれかが、MonoRail 1.0 RC3との統合に直接影響しますか?
c# - Unity に TryResolve はありますか?
Unityが失敗したResolutionFailedException
場合にスローしないようにするにはどうすればよいResolve
ですか?
のようなものはありTryResolve<IMyInterface>
ますか?