如何在Prism应用程序中手动解析类型时获取正确的INavigationService实例

克里斯多夫·梅特

看来,当我手动解析一个类型并INavigationService在其中请求一个类型时,就会注入一个与其他地方都使用的实例不同的实例。

为了澄清我的用例,这里是相关文件的摘录。如您所见,在解析类型时SampleProcessINavigationService将注入,但实例与我进入的实例不同ProcessService(哪个btw是正确的实例,可以用于导航。注入的实例SampleProcess不能用于导航。)

关于为什么发生这种情况的任何想法,更重要的是我如何获得INavigationService被注入的正确实例SampleProcess是的,我可以例如通过将其传递给方法来提供它,但这并不是那么漂亮。

App.xaml.cs

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterSingleton<ProcessService>();
    containerRegistry.Register<Processes.SampleProcess>();
}

ProcessService.cs

public class ProcessService
{
    private readonly IContainer container;
    private readonly INavigationService navigationService;

    public ProcessService(IContainer container, INavigationService navigationService)
    {
        this.container = container;
        this.navigationService = navigationService;
    }

    public void ExecuteProcess(ProcessEnum processEnumValue)
    {
        Type processType = processEnumValue switch
        {
            ProcessEnum.SampleProcess => typeof(Processes.SampleProcess),
            _ => throw new NotImplementedException()
        };

        var process = App.Current.Container.Resolve(processType) as IProcess;

        bool test = process.CheckNavigationService(navigationService); // will return false
    }
}

SampleProcess.cs

public class SampleProcess : IProcess
{
    private readonly INavigationService navigationService;

    public SampleProcess(INavigationService navigationService)
    {
        this.navigationService = navigationService;
    }

    public bool CheckNavigationService(INavigationService navigationService)
    {
        return this.navigationService == navigationService;
    }
}
克里斯多夫·梅特

我通过向在视图模型内调用INavigationServiceExecuteProcess方法中添加一个参数(实际上具有正确的INavigationService实例)解决了该问题。然后,在该方法中,通过执行以下操作解决该过程:

var process = container.Resolve(processType, new[] { navigationService }) as IProcess;

这样,正确的INavigationService实例在实例中可用IProcess

正如@Dan Siegel所说,可以通过使用Prism 8并将其注册ProcessService为作用域服务来进一步改善,因为这将消除在中具有INavigationService参数的必要ExecuteProcess

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Xcode(iOS)模拟器中手动安装应用程序

来自分类Dev

如何在iOS Swift应用程序中从Firebase手动发布数据?

来自分类Dev

如何手动将应用程序安装到“应用程序”列表中

来自分类Dev

如何使从 .tar 手动提取的应用程序在“显示应用程序”中可用?

来自分类Dev

如何在ASP.NET Core RC2应用程序中手动重新加载IOptions

来自分类Dev

在应用程序中手动终止FB会话

来自分类Dev

如何在Mint 17.3上手动添加启动应用程序

来自分类Dev

如果tomcat的webapps目录中有多个应用程序,如何在apache-tomcat中手动启动和停止应用程序?

来自分类Dev

如何更新Openshift中从git手动创建的应用程序?

来自分类Dev

如何在JOOQ中手动创建RecordN的实例?

来自分类Dev

如何将手动部署的单实例应用程序重构为客户端部署的多实例或多租户应用程序

来自分类Dev

通过Xcode在Debug中运行应用程序与手动运行应用程序

来自分类Dev

如何在 Haskell 中手动部分应用函数

来自分类Dev

手动解析InstancePerRequest类型时未收到Autofac相同的注入实例

来自分类Dev

我是否需要在Django Web应用程序中手动获取OAuth的新令牌?

来自分类Dev

如何在金字塔Web应用程序内手动提交sqlalchemy数据库事务?

来自分类Dev

Android-单击按钮时手动更改应用程序区域设置

来自分类Dev

Wpf 应用程序不是在启动时启动而是手动运行?

来自分类Dev

如何在TypeScript中获取函数应用程序的类型?

来自分类Dev

C#-手动关闭表单应用程序

来自分类Dev

MongoDB-无需应用程序的手动引用

来自分类Dev

检测是否手动关闭了应用程序

来自分类Dev

手动编辑会话的启动应用程序?

来自分类Dev

检测是否手动关闭了应用程序

来自分类Dev

C#-手动关闭表单应用程序

来自分类Dev

手动连接应用程序洞察

来自分类Dev

手动安装的应用程序的优先级

来自分类Dev

在类型实例中手动转换输入参数

来自分类Dev

锁定“应用程序部署信息”肖像后,如何手动设置设备方向?

Related 相关文章

  1. 1

    如何在Xcode(iOS)模拟器中手动安装应用程序

  2. 2

    如何在iOS Swift应用程序中从Firebase手动发布数据?

  3. 3

    如何手动将应用程序安装到“应用程序”列表中

  4. 4

    如何使从 .tar 手动提取的应用程序在“显示应用程序”中可用?

  5. 5

    如何在ASP.NET Core RC2应用程序中手动重新加载IOptions

  6. 6

    在应用程序中手动终止FB会话

  7. 7

    如何在Mint 17.3上手动添加启动应用程序

  8. 8

    如果tomcat的webapps目录中有多个应用程序,如何在apache-tomcat中手动启动和停止应用程序?

  9. 9

    如何更新Openshift中从git手动创建的应用程序?

  10. 10

    如何在JOOQ中手动创建RecordN的实例?

  11. 11

    如何将手动部署的单实例应用程序重构为客户端部署的多实例或多租户应用程序

  12. 12

    通过Xcode在Debug中运行应用程序与手动运行应用程序

  13. 13

    如何在 Haskell 中手动部分应用函数

  14. 14

    手动解析InstancePerRequest类型时未收到Autofac相同的注入实例

  15. 15

    我是否需要在Django Web应用程序中手动获取OAuth的新令牌?

  16. 16

    如何在金字塔Web应用程序内手动提交sqlalchemy数据库事务?

  17. 17

    Android-单击按钮时手动更改应用程序区域设置

  18. 18

    Wpf 应用程序不是在启动时启动而是手动运行?

  19. 19

    如何在TypeScript中获取函数应用程序的类型?

  20. 20

    C#-手动关闭表单应用程序

  21. 21

    MongoDB-无需应用程序的手动引用

  22. 22

    检测是否手动关闭了应用程序

  23. 23

    手动编辑会话的启动应用程序?

  24. 24

    检测是否手动关闭了应用程序

  25. 25

    C#-手动关闭表单应用程序

  26. 26

    手动连接应用程序洞察

  27. 27

    手动安装的应用程序的优先级

  28. 28

    在类型实例中手动转换输入参数

  29. 29

    锁定“应用程序部署信息”肖像后,如何手动设置设备方向?

热门标签

归档