問題タブ [constructor-injection]
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: クライアントのアセンブリをコンストラクター引数として渡し、属性を使用してクライアントから目的の実装を指定する
私は一般的に Ninject と Dependency Injection を初めて使用するので、ここで私の初心者を許してください。=)
IConfig
インターフェイスを実装する型のアセンブリとその依存関係をスキャンするインターフェイスの実装がいくつかありIConfigOption
ます。各IConfig
実装は、異なるソースから値を取得します。
これらの実装は、スキャンを開始する場所からルート アセンブリをコンストラクターの引数として受け取ります。私は、これらの値を挿入するバインディングを考え出そうとしています。これまでのところ、次の行で何かを考えています。
私の問題は、クラスが注入されるtarget
アセンブリへの参照を取得する方法が見つからないように見えることです。Config
DI を使用しない場合は を使用Assembly.GetCallingAssembly()
しますが、このコンテキストでは、必要なターゲット アセンブリではなく、バインディングが存在するアセンブリが生成されます。
また、インジェクションを受け取るクラス/メンバーから目的の実装を指定する方法が必要です。たとえば、クライアント クラス A は をConfig
使用する実装者をRoleEnvironment
要求し、クライアント クラス B は をConfig
使用する実装者を要求しますConfigurationManager
。使用目的を明確にするための例を次に示します。
これを間違った角度から見ているか、明白なものを見逃しているように感じますが、何を探すべきかわかりません。どのように行うのが最善の方法でしょうか?
どうもありがとうございました。
編集:意図した使用例を追加し、明確にするために質問の一部を言い換えました。
c# - ninject ninject によるジェネリック型のすべてのインスタンスのインジェクション
ninject を使用して、特定のジェネリック型のすべてのインスタンスをクラスに注入できるようにしたいと考えています。たとえば、次のような形式のカスタム エクストラクタが多数あります。
そして、これらのエクストラクタのすべてのインスタンスを、ninject 複数バインディングを使用して、このファイルの処理を担当するクラスに注入したいと考えています。
すなわち
過去に、カーネルに直接アクセスする管理クラス (IProvideExtractors) を使用してこれを実行しましたが、この方法が気に入らず、これを行うためのより良い方法を誰かが知っているかどうか疑問に思っていました。ninject 複数バインディングを使用すると、使用することに関心のあるすべてのインスタンスを取得できますkernel.GetAll(typeof(IExtract<>))
asp.net-mvc - コンストラクター インジェクションと MEF を備えた Asp.net MVC ベース コントローラー
いくつかのログ機能を子クラスに公開する基本コントローラー クラスがあります。このロギング依存関係は、コンストラクターによって注入されます。単純化されたコードを提供するために、これはすべてがどのように見えるかです:
私の子コントローラーにも独自の依存関係があるため、次のようになります。
これらのコンストラクターを使用して、単体テストで依存性注入を簡単に実行できるようにしていますが、本番環境では、すべての構成は MEF によって行われます (する必要があります)。MEF を使用してコントローラーをインスタンス化するカスタム コントローラー ファクトリ クラスを使用しています。
要約すると:
- 独自の依存関係を持つ基本抽象コントローラー クラスがあります。
- インポートを使用して MEF によって注入されたパラメーターを取得する子孫コントローラーがあります (つまり、依存関係と基本クラスの依存関係です)。
- 単体テストは MEF を使用しないため、コンストラクター パラメーターにモックが挿入されます。
問題
これはすべて私に水を与えますが、MEF の考え方は異なります。このコードをコンパイルして実行すると、次の例外が発生します。
GetExportedValue は、前提条件のインポート 'SomeController..ctor (Parameter="logger", ContractName="ILogger")' が設定される前に呼び出すことはできません。
コンストラクターのパラメーターとして使用されるすべてのインターフェイス型には属性がInheritedExport
設定されており、具体的な実装も含まれているため、期待どおりに機能するはずです。
同じではない作業代替
これらのプライベートフィールドで直接インポートを行うことで別のアプローチを試みると、すべてうまくいくようです。
したがって、これは機能しますが、同じではありません...依存関係の挿入のためにここにコンストラクターを追加できますが、2セットのコンストラクターがあり、ユニットテストを行うときに、依存関係がないためもちろん間違っているパラメーターなしのコンストラクターを使用する可能性があります設定されます。本物でもモックでもない。
質問
依存性注入コンストラクターを として設定することにより、コンストラクターに具体的な実装を注入することにより、MEF がコントローラーを作成するように説得するにはどうすればよいImportingConstructor
ですか?
asp.net-mvc-3 - MVC: オーバーロードされたコンストラクターを条件付きで呼び出す
私は CQRS を実装している MVC アプリケーションを使用しており、データの保存と別のインターフェイスへのデータの読み取りを分離しています。これらのインターフェイスの具体的なインスタンスをコントローラーに注入するために、コンストラクター注入を使用しています。コンストラクター インジェクションには、Unity コンテナーを使用しています。以下の例を参照してください
どのアクションでも、データをフェッチするか、データを書き込むかのいずれかであり、両方ではないことがわかりました。その場合、「_Writer」または「_Reader」のどちらを初期化する必要があるかに応じて、コントローラー コンストラクターを条件付きで呼び出す必要があります。
これはどのように行うことができますか?
c# - 動的/コンテキスト依存のコンストラクターインジェクション
コンストラクターパラメーターIActionLoggeractionLoggerを挿入したいのですが、他のパラメーターlargeBucket、smallBucket、およびamountToRetrieveがコンテキスト依存である必要があります(これが正しい用語かどうかはわかりません)。
質問:
これらのコンストラクターパラメーターを自動プロパティにして、IActionLogger actionLoggerパラメーターをコンストラクターに残す必要がありますか?
基本的に、計算はlargeBucket、smallBucket、amountToRetrieve変数に基づいて異なりますか?事前にいくつかの設定を行う必要があるため、これらの変数をコンストラクターに入れました。
c#-4.0 - 他の依存関係によって作成されたオブジェクトのSpring.NETコンストラクターインジェクション
次の問題:
RabbitMQを使用してAPIに接続するWCFサービスを開発しています。DIコンテナとしてスプリングを使用しています。
コンシューマークラスを作成しました(rabbit MQ +ロギング用のカスタムロジック)
トリミングされたバージョン:
そして、ConnectionManagerクラスがあります。
ここで問題は、Spring.NETですべてを配線するときです。ConnectionManagerクラスのChannelプロパティをConsumerコンストラクターに注入します。
これまでのSpring構成(トリミング):
では、ここでDo Somethingファンキーに何を配置しますか?
コンシューマーにConnectionManagerを書き直して挿入することもできます(最後のオプション)
design-patterns - 他の具体的なタイプへの依存性を渡す依存性注入
これは大したことではなく、アプリケーションも大きくはないと確信していますが、経験を積むために、できる限りどこでもDIを練習しようとしています。私は次のクラスを持っており、コンソールアプリケーションでユーザーが入力したいくつかの引数を解析し、渡された引数に基づいてICommandのインスタンスを返します。コンソールアプリでコマンドを使用する設計は、MarkSeemanの著書であるDependencyInjectionから引用しています。 。ネット。私の問題は、ICommandクラスの1つの実装にIDocumentServiceのインスタンスが必要なことです。今のところ、ICommandへの依存関係を満たすことができることを確認するために、コンストラクターインジェクションを使用してIDocumentServiceをパーサーに渡します。クラスに依存関係がある場合は、依存関係に渡すだけでなく、その依存関係を使用する必要があると思うので、これは奇妙に思えます。同時に、Parserクラスがドキュメントルートよりも後でIDocumentServiceを解決できるように、抽象IDocumentServiceFactoryを構築した場合、それはやり過ぎだと思います。この設計上の問題を解決するためのガイダンスをいただければ幸いです。
asp.net-mvc - Unity を使用してコンストラクター パラメーターを動的に挿入する
ASP.NET MVC 4 アプリケーションで依存関係の挿入に Unity コンテナーを使用しています。
特定のコントローラー (ProductController など) に対して、次のような依存性注入のシナリオがあります。
- ProductController コンストラクターは、IProductsRepository インスタンスを受け取ります。
- IProductsRepository の実装には、IProductsService インスタンスを受け入れるコンストラクターがあります。
- IProductsService の実装には、Web 要求の Cookie から取得される認証トークン文字列を受け入れるコンストラクターがあります。
コントローラー インスタンスが作成された後にのみ認証トークン Cookie を取得できることを考えると、このシナリオで自動依存性注入を行う正しい方法は何ですか?
c# - サービスを解決するときに Unity が使用するコンストラクターを指定するにはどうすればよいですか?
次のコンストラクタがあります。
そしてBootstrapper.csで
Unity にサービスを解決させようとすると、1 つのパラメーターを持つ複数のコンストラクターがあるというエラー メッセージが表示されます。
Unity に 2 つのコンストラクターのいずれかを強制的に使用させる方法はありますか?
c# - コンストラクターインジェクションWin8アプリ
Win8アプリでDIとIoCを実装する方法は?Windowsフォームでは、依存関係のあるフォームが必要な場合、コンストラクター(コンストラクターインジェクション)で渡しましたが、Pageではどのように行いますか?このコンストラクターを使用してページを作成すると(
そうして
どうすれば引数を渡すことができますか?