欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 【WPF】Prism学习(八)

【WPF】Prism学习(八)

2025/4/6 13:42:56 来源:https://blog.csdn.net/weixin_45125631/article/details/143799879  浏览:    关键词:【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)
    • 处理解析错误

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词