【WPF】Prism学习(八)

Prism Dependency Injection

在这里插入图片描述

1.处理解析错误

1.1. 处理解析错误

  • 这个特性是在Prism 8中引入的,如果你的应用目标是早期版本,则不适用。

1.2. 异常发生的原因

  • 开发者可能会遇到多种原因导致的异常,常见的错误包括未注册的服务或无效的XAML,这些在视图解析时会引发异常。

1.3. Prism容器扩展

  • Prism容器扩展现在会非常刻意地捕获任何底层容器异常,并抛出一个ContainerResolutionException

1.4. ContainerResolutionException的目标

  • 通过提供你需要的信息来缩短开发循环,帮助你诊断和修复代码中的问题。

1.5. ContainerResolutionException包含的内容

  • 它包含一些常量消息,如MissingRegistrationCannotResolveAbstractTypeCyclicalDependency
  • 除了这些常量,它还暴露了正在解析的服务名称(ServiceName)和服务类型(ServiceType)的属性。

1.6. 代码示例

public class ModuleA : IModule
{private IServiceIForgotToRegister IAmADunce { get; }public ModuleA(IServiceIForgotToRegister iAmADummy){IAmADunce = iAmADummy;}
}
  • 展示了一个名为ModuleA的类,它实现了IModule接口,并尝试注入一个名为IServiceIForgotToRegister的服务,但作者忘记注册这个服务。

1.7. 事件处理

  • 可以通过挂钩ModuleManagerLoadModuleCompleted事件来查看模块加载时发生的情况。
protected override void InitializeModules()
{var manager = Container.Resolve<IModuleManager>();manager.LoadModuleCompleted += LoadModuleCompleted;manager.Run();
}private void LoadModuleCompleted(object sender, LoadModuleCompletedEventArgs e)
{LoadModuleCompleted(e.ModuleInfo, e.Error, e.IsErrorHandled);
}protected virtual void LoadModuleCompleted(IModuleInfo moduleInfo, Exception error, bool isHandled)
{if (error != null){// Do Something}
}

1.8. 错误处理

  • 如果发生错误,可以通过ContainerResolutionExceptionGetErrors()方法来获取错误的详细信息,包括错误类型和错误消息。
protected virtual void LoadModuleCompleted(IModuleInfo moduleInfo, Exception error, bool isHandled)
{if (error != null && error is ContainerResolutionException cre){var errors = cre.GetErrors();foreach((var type, var ex) in errors){Console.WriteLine($"Error with: {type.FullName}");Console.WriteLine($"{ex.GetType().Name}: {ex.Message}");}}
}

1.9. 运行结果

  • 当运行代码时,应该能看到类似于以下的输出,指出了具体的错误类型和消息,例如:“未在容器中找到指定类型的注册”。
Error with: MyProject.Services.IServiceIForgotToRegister
ContainerResolutionException: No Registration was found in the container for the specified type

相关链接

  • 介绍(Introduction)
  • 命令(Commands)
    • 命令(Commanding)
    • 复合命令(Composite Commands)
    • 异步命令(Async Commands)
    • 错误处理(Error Handling)
  • 依赖注入(Dependency Injection)
    • 依赖注入(Dependency Injection)
    • 注册类型(Registering Types)
    • 处理解析错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19911.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

游戏引擎学习第19天

介绍 这段内容描述了开发者在进行游戏开发时&#xff0c;对于音频同步和平台层的理解和调整的过程。以下是更详细的复述&#xff1a; 开发者表达了他希望今天继续进行的工作内容。他提到&#xff0c;昨天他讲解了一些关于音频的内容&#xff0c;今天他想稍微深入讲解一下他正…

蓝队技能-应急响应篇Rookit后门进程提取网络发现隐藏技术Linux杀毒OpenArk

知识点&#xff1a; 1、应急响应-Windows-Rootkit-分析&清除 2、应急响应-Linux-Rootkit-分析&查毒&清除 内存马和rookit都是属于权限维持技术&#xff0c; 内存马一般是用来控制网站&#xff0c;rookit一般是用来控制服务器&#xff08;隐藏常规C2后门&#xff…

MAC创建一个自动操作,启动系统【睡眠】功能,并将绑定快捷键

目的 通过 Automator 创建一个服务来启动系统【睡眠】这个功能&#xff0c;并绑定快捷键。 步骤一&#xff1a;创建 Automator 服务 打开 Automator&#xff1a; ○ 在 Spotlight 中搜索 Automator&#xff0c;然后打开。选择服务类型&#xff1a; ○ 在 Automator 的启动界…

OpenLayers教程11_在OpenLayers中启用WebGL渲染

在 OpenLayers 中启用 WebGL 渲染&#xff1a;提高地图渲染性能的完整指南 目录 一、引言二、WebGL 渲染在 Web GIS 中的作用 WebGL 的优势WebGL 与 Canvas 渲染的区别 三、在 OpenLayers 中启用 WebGL 的方法四、代码实现步骤 1. 初始化地图和基本 WebGL 渲染2. 加载大规模点…

利用Matlab函数实现深度学习算法

深度学习是一种机器学习技术&#xff0c;其核心是构建多层神经网络&#xff0c;通过深入的学习来实现对数据的有效建模和分析。在深度学习的发展过程中&#xff0c;产生了许多算法和框架&#xff0c;Matlab是其中之一&#xff0c;提供了大量的深度学习函数&#xff0c;可以帮助…

每日OJ题_牛客_dd爱旋转_模拟_C++_Java

目录 牛客_dd爱旋转_模拟 题目解析 C代码 Java代码 牛客_dd爱旋转_模拟 dd爱旋转 输入描述&#xff1a; 第一行一个数n(1≤n≤1000)&#xff0c;表示矩阵大小 接下来n行&#xff0c;每行n个数&#xff0c;描述矩阵&#xff0c;其中数字范围为[1,2000] 一下来一行一个数q(1…

从零开始打造个人博客:我的网页设计之旅

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

【C语言】操作符2(含操作符的应用)

1、单目操作符 单目操作符有下面几种&#xff1a; &#xff01;、、--、&&#xff08;取地址&#xff09;、*&#xff08;指针&#xff09;、&#xff08;正号&#xff09;、-&#xff08;负号&#xff09;、~、sizeof、&#xff08;类型&#xff09; 其中就还有&和*操…

博客文章怎么设计分类与标签

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;博客文章怎么设计分类与标签 新网站基本上算是迁移完了&#xff0c;迁移之后在写文章的过程中&#xff0c;发现个人的文章分类和标签做的太混乱了&#xff0c;分类做的像标签&#xff0c;标签也不是特别的丰富&#x…

【计算机网络】物理层

&#x1f3af; 导读&#xff1a;本文档概述了计算机网络物理层的基础知识&#xff0c;包括物理层的作用、四大任务、传输媒体分类及其特性&#xff0c;深入讲解了调制技术和编码方法如曼彻斯特编码等&#xff0c;探讨了信道的极限容量&#xff0c;介绍了奈氏准则和香农公式&…

【AI赋能电商】数据分析和训练精准导向

AI赋能电商&#xff1a;重塑销售效率与用户体验的新篇章 一、AI驱动的购物推荐系统二、会员分类与精细化运营三、智能商品定价策略四、AI在供应链管理中的应用结语 在当今这个技术日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;已不再是一个遥不可及的概念&…

多组织对接方案案例

前言 不同组织间的数据共享和整合&#xff0c;以便实现库存、订单的实时同步。多组织的对接需求往往一个销售订单需要再不同的组织生成不一样的单据&#xff0c;并且完成内部结算&#xff0c;这个案例对接的是金蝶云星空&#xff0c;具备多组织的特性&#xff0c;所以在前期规…

基于YOLOv8深度学习的医学影像肝脏肿瘤病症检测与诊断系统(PyQt5界面+数据集+训练代码)

随着医学影像技术和计算机视觉技术的快速发展&#xff0c;医疗诊断中的自动化工具正逐渐成为临床应用中的研究热点。在肝脏肿瘤的早期检测与诊断中&#xff0c;传统的人工方法耗时较长&#xff0c;且容易受医生的主观经验影响&#xff0c;诊断结果的准确性和一致性难以保证。基…

table元素纯css无限滚动,流畅过度

<template><div class"monitor-table-container"><table class"monitor-table"><thead><th>标题</th><th>标题</th><th>标题</th><th>标题</th></thead><tbody ref&quo…

springboot-事务失效以及排查过程

排查了好久&#xff0c;终于解决&#xff0c;希望这次的排查过程对大家也有帮助&#xff0c;废话少说&#xff0c;上源码 开发环境 springboot 2.3.11 jdk8 gradle6.4 HikariDataSource ps: 本环节使用双数据源&#xff0c;在service层做切面拦截&#xff0c;切换具体的数据源…

Docker入门之Windows安装Docker初体验

在之前我们认识了docker的容器&#xff0c;了解了docker的相关概念&#xff1a;镜像&#xff0c;容器&#xff0c;仓库&#xff1a;面试官让你介绍一下docker&#xff0c;别再说不知道了 之后又带大家动手体验了一下docker从零开始玩转 Docker&#xff1a;一站式入门指南&#…

信息与网络安全

1.对称密码体制的优缺点 优点&#xff1a;1.加密解密处理速度快 2.保密度高&#xff1b; 缺点&#xff1a;1.对称密码算法的密钥 分发过程复杂&#xff0c;所花代价高 2.多人通信时密钥组合的数量会出现爆炸性膨胀&#xff08;所需密钥量大&#xff09; 3.通信双方必须统一密钥…

GPT、Python和OpenCV支持下的空天地遥感数据识别与计算

在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专业人士而言&#xff0c;如何高效地处…

STM32完全学习——外部中断

一、嵌套向量中断控制器 我们在这里使用标准库的方式来处理。因此只需要调用几个函数就可以了。 NVIC_InitTypeDef NVIC_InitStruct; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //中断优先级分组 分1组NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); …

【动手做】安装Miniconda和jupyter notebook环境实现线性回归

Miniconda提供快速、简便的Python环境管理&#xff0c;包括安装、运行和更新软件包及其依赖项。Jupyter Notebook是一个交互式笔记本&#xff0c;在机器学习研究中广泛使用。本文旨在进行基础的环境配置&#xff0c;为后续的机器学习实践打好基础。 Miniconda与Jupyter Notebo…