如何从Prism导航异常中获取缺失的依赖服务名称?
如何从DryIoc+Prism导航异常中获取缺失的服务名称
逐层排查异常链
Prism导航抛出的外层异常只会提示无法解析ViewModel,但DryIoc的原生解析异常会藏在多层InnerException里。你需要一直展开InnerException,直到找到DryIoc的ContainerException,它的Message会明确指出缺失的服务接口名称,甚至会附带完整的依赖解析链路。开启DryIoc的详细错误输出
在初始化DryIoc容器时,添加WithDetailedErrors()配置,让容器生成更详尽的错误信息:
var container = new Container(rules => rules.WithDetailedErrors() .WithTrackingDisposableTransients());
开启后,DryIoc抛出的异常会直接包含缺失服务的具体类型,不需要手动深挖异常链。
- 自定义导航回调的异常处理
如果想在导航回调里直接提取信息,可以专门捕获DryIoc的容器异常:
_regionManager.RequestNavigate("TargetRegion", "ViewB", result => { if (!result.Result.Success) { var dryIocException = result.Result.Error.InnerException as ContainerException; if (dryIocException != null) { // 从dryIocException.Message中获取缺失的服务名称 string missingService = dryIocException.Message; // 这里可以做日志记录或错误提示 } } });
内容的提问来源于stack exchange,提问作者Alessandro Gaspani
相关产品推荐
相关产品推荐

