C# 无法注入IEnumerable<;T>;简易喷油器
我有一个名为IConfiTab的接口,它将在我的代码的不同位置实现 我希望代码能够做到这一点C# 无法注入IEnumerable<;T>;简易喷油器,c#,simple-injector,C#,Simple Injector,我有一个名为IConfiTab的接口,它将在我的代码的不同位置实现 我希望代码能够做到这一点 // Add all IConfig instances as user controls to the settings tabs if they are // configured to do so foreach (var configTab in _configTabs) { if (configTab.ShowTab) { //add Config Tab i
// Add all IConfig instances as user controls to the settings tabs if they are
// configured to do so
foreach (var configTab in _configTabs)
{
if (configTab.ShowTab)
{
//add Config Tab instance to GUI here
}
}
_configTabs应该是找到的每种类型的IConfigTab实例的某种集合
我使用以下代码尝试注册所有找到的IConfigTab类型
// Register all IConfigTabs we find in the current runtime
var iconfigTypes =
from nd in AppDomain.CurrentDomain.GetAssemblies()
from type in nd.GetExportedTypes()
where !type.IsAbstract
where typeof(IConfigTab).IsAssignableFrom(type)
select type;
foreach (var iconfigType in iconfigTypes)
{
container.Register(iconfigType);
}
container.Verify();
var configTabs = container.GetInstance<IEnumerable<IConfigTab>>().ToArray();
//注册当前运行时中找到的所有IConfigtab
变量iconfigTypes=
从AppDomain.CurrentDomain.GetAssemblys()中的nd开始
从nd.GetExportedTypes()中的类型
哪里类型.IsAbstract
其中typeof(IConfigTab).IsAssignableFrom(type)
选择类型;
foreach(iconfigTypes中的变量iconfigType)
{
容器。寄存器(iconfigType);
}
container.Verify();
var configTabs=container.GetInstance().ToArray();
问题是configTabs的大小为0
这可能吗?我希望Simple Injector返回刚刚找到答案的类型为IConfigTab
的每个类的实例
// Simple Injector v3.x syntax
container.RegisterCollection(typeof(IConfigTab),
AppDomain.CurrentDomain.GetAssemblies());
// Simple Injector v2.x syntax
// Register all IConfigTabs we find in the current runtime
var iconfigTypes =
from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetExportedTypes()
where !type.IsAbstract
where typeof(IConfigTab).IsAssignableFrom(type)
select type;
container.RegisterAll(typeof(IConfigTab), iconfigTypes);
您必须使用RegisterCollection
,指定服务类型(在本例中为IConfigTab
),并向其传递实现类型列表