使用Simple Injector注册集合

时间:2017-01-18 14:00:54

标签: c# dependency-injection simple-injector

我尝试在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中使用。 如果有任何遗漏信息,我很乐意帮助您解决我的问题。

1 个答案:

答案 0 :(得分:4)

如果我在本地重现您的示例,使用最新版本的Simple Injector,我会收到以下消息:

  

配置无效。为DispoLinienManager类型创建实例失败。 DispoLinienManager类型的构造函数包含名称为“mitarbeiterValidators”的参数和未注册的类型IValidateMitarbeiter。请确保注册IValidateMitarbeiter,或更改DispoLinienManager的构造函数。 然而,IEnumerable&lt; IValidateMitarbeiter&gt;的注册;你的意思是依赖于IEnumerable&lt; IValidateMitarbeiter&gt; 吗?

请注意该消息的最后部分。

如文档中所述here,Simple Injector将集合注册与一对一映射分开:

  

在设计Simple Injector时,我们做了一个非常明确的设计决策来定义一个单独的 RegisterCollection 方法,用于为抽象注册服务集合。