使用Simple Injector注册相同类型的实例

Kyl*_*bel 4 c# dependency-injection ioc-container simple-injector

我刚拿起Simple Injector,我目前想做的就是:

Container.Register<IMessageHandler>(() => new MessageHandlerOne());
Container.Register<IMessageHandler>(() => new MessageHandlerTwo());
Run Code Online (Sandbox Code Playgroud)

我只是想注册两个消息处理程序,所以我可以稍后迭代它们.

要恢复这些注册的实例,这种方法听起来就像它可以做到的那样.

var instances = Container.GetAllInstances<IMessageHandler>();
//why doesn't instances contain both MessageHandlerOne, and MessageHandlerTwo ?
Run Code Online (Sandbox Code Playgroud)

相反,这会返回一个空的IEnumerable.

我究竟做错了什么?对于名为Simple Injector的东西,您会认为这会起作用吗?我是否以错误的方式思考这个问题?

Ste*_*ven 5

您尝试做的事情应该在第二次调用时失败,Container.Register<IMessageHandler>因为Simple Injector API 明确区分了集合的注册.

换句话说,如果要解析集合,则应注册集合:

Container.Collection.Register<IMessageHandler>(
    typeof(MessageHandlerOne), 
    typeof(MessageHandlerTwo));
Run Code Online (Sandbox Code Playgroud)