【问题标题】:How to debug using UnityContainer Resolve?如何使用 UnityContainer Resolve 进行调试?
【发布时间】:2019-02-09 22:15:36
【问题描述】:

0) 如何调试 unityContainer?

我正在公司的一个遗留项目上工作,所有项目都是使用 unityContainer 使用依赖注入加载的。我需要对表示层进行改进,但我无法调试代码,只能调试主项目,加载所有模块。

用于加载模块(项目)的代码:

unityContainer.RegisterType("FrontEndModule", new InjectionMember[0]);

在模块上,我像这样注册所有项目类型:

unityContainer.RegisterType< IAboutPage, AboutPage>();

然后我运行主窗体:

Application.Run((Form) unityContainer.Resolve< IMainPage >() );

1) 那么有什么办法可以调试加载项目的代码呢?

2) 我是否需要进行任何更改才能进行调试? 我尝试直接运行表单,但是运行时需要进行大量注入。也许我可以使用另一个 IoC 框架来调试已加载项目的代码。

谢谢。

【问题讨论】:

    标签: c# visual-studio debugging inversion-of-control unity-container


    【解决方案1】:

    调试代码时,Unity 没有什么特别之处。

    为了能够逐步完成您需要的代码

    • 与您正在使用的 DLL 匹配的 PDB 文件(通常意味着“在本地重建”,除非 PDB 与 DLL 一起发布)
    • 源代码,最好与用于构建 DLL 的源版本匹配(VS 将允许使用不匹配的源,但是当单步执行与实际发生的情况不匹配时,您可能会获得非常糟糕的体验,因为 PDB 中的行号没有与实际文本源对齐)
    • 您可能需要禁用“工具->选项->调试->仅我的代码”设置,以允许在解决方案之外的代码中单步执行/断点(这取决于 VS 心情:))

    如果您无法获取 PDB,您仍然可以看到异常和调用堆栈(因为此信息是 DLL 元信息的一部分)。

    切换到另一个 DI 框架不会对此产生任何影响。

    【讨论】:

    • 谢谢。禁用“仅启用我的代码”选项就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2023-03-14
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多