我尝试在c#中使用简单的注入器注册一个集合。我的方法如下:
container.Collection.Register<IValidateMitarbeiter>(
typeof(MitarbeiterVerfuegbarkeitValidator),
typeof(MitarbeiterQualifikationsValidator));
但我收到此错误消息:
配置无效。为IDispoLinienManager类型创建实例失败。 DispoLinienManager类型的构造函数包含名称为“mitarbeiterValidators”的参数和未注册的类型IValidateMitarbeiter。请确保注册IValidateMitarbeiter,或更改DispoLinienManager的构造函数。
这是DispoLinienManager的构造函数
public DispoLinienManager(IDataContextFactory dataContextFactory,
IDispoPlanLinieFactory dispoPlanLinieFactory,
IValidateMitarbeiter mitarbeiterValidators)
{
this.dataContextFactory = dataContextFactory;
this.dispoPlanLinieFactory = dispoPlanLinieFactory;
this.mitarbeiterValidators = mitarbeiterValidators;
}
IValidateMitarbeiter有两个实现,它们都在DispoLinienManager中使用。 如果有任何遗漏信息,我很乐意帮助您解决我的问题。
答案 0 :(得分:4)
如果我在本地重现您的示例,使用最新版本的Simple Injector,我会收到以下消息:
配置无效。为DispoLinienManager类型创建实例失败。 DispoLinienManager类型的构造函数包含名称为“mitarbeiterValidators”的参数和未注册的类型IValidateMitarbeiter。请确保注册IValidateMitarbeiter,或更改DispoLinienManager的构造函数。 然而,IEnumerable&lt; IValidateMitarbeiter&gt;的注册;你的意思是依赖于IEnumerable&lt; IValidateMitarbeiter&gt; 吗?
请注意该消息的最后部分。
如文档中所述here,Simple Injector将集合注册与一对一映射分开:
在设计Simple Injector时,我们做了一个非常明确的设计决策来定义一个单独的 RegisterCollection 方法,用于为抽象注册服务集合。