Я хотел бы иметь возможность использовать ninject для внедрения всех экземпляров определенного универсального типа в класс. Например, у меня есть куча пользовательских экстракторов формата, похожего на:
public interface IExtract<TEntity>
{
TEntity ExtractFrom(MyBulkExportedEntity exportedEntity);
}
и я хочу внедрить все экземпляры этих экстракторов в класс, отвечающий за обработку этого файла, используя множественную привязку ninject.
ie
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), который напрямую обращается к ядру, но мне не нравится этот метод, и мне было интересно, знает ли кто-нибудь лучший способ сделать это. С помощью множественной привязки ninject я могу получить все интересующие меня экземпляры, используя kernel.GetAll(typeof(IExtract<>))
Process
необходимо, чтобыIExtract<TEntity>
был универсальным? Потому что в противном случае я бы создал неуниверсальныйIExtract
, аIExtract<TEntity>
унаследовал бы отIExtract
. И при правильной регистрации в вашем конструктореProcessDataExtract
вы будете зависеть отIEnumerable<IExtract> allExtractors
- person nemesv   schedule 08.06.2012