【发布时间】:2012-06-07 20:25:45
【问题描述】:
我希望能够使用 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) 来做到这一点,但我不喜欢这种方法,想知道是否有人知道更好的方法来做到这一点。使用 ninject 多重绑定,我可以使用 kernel.GetAll(typeof(IExtract<>)) 获得所有我感兴趣的实例
【问题讨论】:
-
在
Process方法中是否需要IExtract<TEntity>是通用的?因为如果不是,那么我将创建一个非通用的IExtract,而IExtract<TEntity>将继承自IExtract。在ProcessDataExtract构造函数中正确注册后,您将依赖IEnumerable<IExtract> allExtractors
标签: c# ninject constructor-injection