无法在简单注入器中注入 IEnumerable<T>
Unable to inject IEnumerable<T> in 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 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 return 每个 class 类型 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
)并向其传递实施类型列表。
我有一个名为 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 return 每个 class 类型 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
)并向其传递实施类型列表。