Prism IContainerProvider - 如何解析未知数量的实例?
Prism IContainerProvider - How may I resolve an unknown number of instances?
我有一个 Prism WPF 应用程序(使用 Unity),它加载了几个模块,每个模块都注册了一个实现通用接口的对象。
在关闭时,我希望我的应用程序能够解析已由所有已加载模块注册的接口的所有实现。
我意识到我可以让每个模块注册一个单独的命名实例,例如
container.RegisterType<IFoo, Foo1>("registration1");
container.RegisterType<IFoo, Foo2>("registration2");
但我的应用不知道字符串 "registration1" 或 "registration2" 也不关心。它甚至不知道最终会加载哪些模块。它只是想获取接口的一个实例并调用一个函数。
有什么方法可以让我在不知道注册时使用的名称的情况下向 IContainerProvider
询问 "give me instances of every separate registration of IFoo"?
Is there a way that I can ask IContainerProvider to "give me instances of every separate registration of IFoo" without knowing the names used to register them?
如果您使用 Unity 作为容器,您可以注入一个 IFoo[]
并获取所有命名注册或注入一个 IEnumerable<IFoo>
以获取所有命名注册 和 默认的。
其他容器may/will 表现不同。 Prism 的容器包装器不承诺任何行为,因此您必须查看容器的文档。
旁注:主动询问容器(大多数情况下)不是一个好主意,例如调用 Resolve
或 ResolveAll
.
我有一个 Prism WPF 应用程序(使用 Unity),它加载了几个模块,每个模块都注册了一个实现通用接口的对象。
在关闭时,我希望我的应用程序能够解析已由所有已加载模块注册的接口的所有实现。
我意识到我可以让每个模块注册一个单独的命名实例,例如
container.RegisterType<IFoo, Foo1>("registration1");
container.RegisterType<IFoo, Foo2>("registration2");
但我的应用不知道字符串 "registration1" 或 "registration2" 也不关心。它甚至不知道最终会加载哪些模块。它只是想获取接口的一个实例并调用一个函数。
有什么方法可以让我在不知道注册时使用的名称的情况下向 IContainerProvider
询问 "give me instances of every separate registration of IFoo"?
Is there a way that I can ask IContainerProvider to "give me instances of every separate registration of IFoo" without knowing the names used to register them?
如果您使用 Unity 作为容器,您可以注入一个 IFoo[]
并获取所有命名注册或注入一个 IEnumerable<IFoo>
以获取所有命名注册 和 默认的。
其他容器may/will 表现不同。 Prism 的容器包装器不承诺任何行为,因此您必须查看容器的文档。
旁注:主动询问容器(大多数情况下)不是一个好主意,例如调用 Resolve
或 ResolveAll
.