【问题标题】:Prism IContainerProvider - How may I resolve an unknown number of instances?Prism IContainerProvider - 如何解决未知数量的实例?
【发布时间】:2020-03-02 03:50:00
【问题描述】:

我有一个 Prism WPF 应用程序(使用 Unity),它加载了几个模块,每个模块都注册了一个实现公共接口的对象。

在关闭时,我希望我的应用能够解析所有已加载模块注册的接口的所有实现。

我意识到我可以让每个模块注册一个单独的命名实例,例如

container.RegisterType<IFoo, Foo1>("registration1");
container.RegisterType<IFoo, Foo2>("registration2");

但我的应用程序不知道字符串“registration1”或“registration2”,也不关心。它甚至不知道最终会加载哪些模块。它只是想获取接口的一个实例并调用一个函数。

有没有一种方法可以让IContainerProvider 在不知道用于注册它们的名称的情况下“给我每个单独注册 IFoo 的实例”?

【问题讨论】:

    标签: prism


    【解决方案1】:

    有没有一种方法可以让 IContainerProvider 在不知道用于注册它们的名称的情况下“给我每个单独注册 IFoo 的实例”?

    如果您使用 Unity 作为容器,您可以注入 IFoo[] 并获取所有命名注册或注入 IEnumerable&lt;IFoo&gt; 以获取所有命名注册默认注册。

    其他容器可能/将会表现不同。 Prism 的容器包装器不承诺任何行为,因此您必须查看容器的文档。

    旁注:(大多数情况下)主动询问容器并不是一个好主意,例如调用ResolveResolveAll

    【讨论】:

    • 我正在使用 Unity。猜猜我必须决定使用容器知识是否值得。到目前为止,我一直避免明确地向容器询问任何内容。公平地说,我实际上是在派生自 PrismApplication 的应用程序类中执行此操作,所以我觉得那里的限制较少。我想我应该问,这种“模式”——要求所有注册——是 IContainerProvider 或 unity 真正设计用于或只是破解​​的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2022-01-20
    • 2021-11-17
    相关资源
    最近更新 更多