generic型IMyGeneric<T> where T : IBase
があります。Ninjectの汎用制約を継承するすべての型を取得します。
すべてのタイプを取得するには、どのようにしてIMyGeneric<T>
をninjectで継承しますか?
this.kernel.GetAll<IMyGeneric<IBase>>();
が、それは動作していないと、その0結果を返す:
は、私はこれを試してみました。私はIBase
を継承しているすべてを取得し、その後foreach
すべてのタイプとthis.kernel.Get(type)
を使用しますが、私はIEnumerable<object>
なくIEnumerable<IMyGeneric<IMyInheritedType>>
を持っているでしょうし、キャストすることができ、特定の種類、例えばのように返しませんでしたIEnumerable<IMyGeneric<IBase>>
キャスト時にエラーが発生するためです。
'IMyGeneric'インターフェースはバリアント型として定義されている場合のみ動作しますし、 'IMyGeneric を'変換: 'IMyGeneric '、それでも、私はNinjectが実際にこれをサポートしていることはないと思います。したがって、あなたが 'IMyGeneric 'の異なるタイプのリストを登録したとしても、Ninjectはおそらくこれらのタイプを取得しません。 –
Steven
制約に基づいてすべての実装を取得する他の方法はありますか?または、IBaseConstraintを作成し(制約のためだけ)、IBase経由ですべてを取得しますか?私はその考えが本当に好きではありませんが。 – zhuber
今後の進め方についてのフィードバックを提供するために、実際の実装をもっと表示したいかもしれません。 – Steven