我有一个名为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 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();
问题是configTabs的大小为0.
这可能吗?我希望Simple Injector返回每个类IConfigTab
的类的实例。
答案 0 :(得分:1)
刚刚找到答案。
// 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
),并向其传递实施类型列表。