ninjectを使用して、特定のジェネリック型のすべてのインスタンスをクラスに注入できます。たとえば、私はと同様の形式のカスタム抽出の束がありますNinject ninjectを持つジェネリック型のすべてのインスタンスの注入
public interface IExtract<TEntity>
{
TEntity ExtractFrom(MyBulkExportedEntity exportedEntity);
}
を、私は複数のバインディングをninject使用してこのファイルを処理するための責任のクラスにこれらの抽出のすべてのインスタンスを注入します。誰もがより良い方法を知っている場合
は過去に
public class ProcessDataExtract
{
/*This isn't valid c# but demonstrates the intent of what i would like to do*/
public ProcessDataExtract(IEnumerable<IExtract<>> allExtractors)
{
}
public void Process(MyBulkExportedEntity exportedEntity)
{
/*loop through all of the extractors and pull relevant data from the object*/
}
}
すなわち、私は直接カーネルにアクセスする管理クラスを(IProvideExtractors)を有することにより、これを行っているが、私はこの方法を好きではないと思っていましたこれをする。
public class ProcessDataExtract
{
public ProcessDataExtract<TExtract>(IEnumerable<IExtract<TExtract>> allExtractors)
{
}
...etc...
}
そしてアウトリスト:ninject複数で、私は、その後のすべてのインスタンスがkernel.GetAll(typeof(IExtract<>))
は、それが必要である:
GenericArgumentBindingGenerator
としてdefindある場合はあなたは
を次のように条約を指定することができます
'IExtractのために'は一般的ですか?もしそうでなければ、私は非一般的な 'IExtract'を作成し、' IExtract 'は' IExtract'から継承します。そして、あなたの 'ProcessDataExtract'コンストラクタに適切な登録があれば、' IEnumerable allExtractors'に従います。 –
nemesv