【问题标题】:How to ResolveAll the instances of a type in IContainerProvider (prism 7+)如何解析 IContainerProvider 中某个类型的所有实例(prism 7+)
【发布时间】:2020-03-02 11:02:56
【问题描述】:

我在统一容器中注册为服务的接口的多个实现。在 Prim 5 之前,UnityBootstrapper 工作良好。我能够 ResolveAll 服务实例,并从中选择要进一步使用的实例。

从 Prism 7 开始,我找不到通过 IContainerProvider 解决该类型的所有实例的方法。有任何想法吗?

cc: prism 开发者

【问题讨论】:

    标签: wpf prism


    【解决方案1】:

    要么获取带有GetContainer 扩展名的底层容器,要么最好不要主动解析。最好让容器在不让消费者知道东西来自哪里的情况下注入。

    旁注:引导程序仍然存在。被标记为过时并不意味着“不能使用”。

    【讨论】:

    • 谢谢。奇怪的是,这个函数是如何从外观(IContainerProvider)中移除的,因为可能存在消费者需要处理该类型的多个实例的真实情况。
    • 如果您需要所有已注册的类型,您始终可以注入一个数组或IEnumerable
    • 这是个好主意,但是,它消除了可扩展性方面。想象一下,您正在加载应用程序的所有插件。插件(以 DLL 的形式)可以在编译后动态删除。
    • 这里有一个误解,注入数组与ResolveAll 完全相同。在哪里完成注册并不重要。假设ModuleA 寄存器ControllerAModuleB 寄存器ControllerB 并且一些代码被注入IController[],它将接收ControllerAControllerB 之一的实例,好像某些代码确实ResolveAll<IController>
    • 一旦需要添加注入 IController[] 的代码,可扩展性就会丢失。该代码现在依赖于 ControllerA 和 ControllerB。 ResolveAll 提供松散耦合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多