C# 使用依赖项注入时,如何在VisualStudio2008中获得平滑的调试体验?

C# 使用依赖项注入时,如何在VisualStudio2008中获得平滑的调试体验?,c#,visual-studio,dependency-injection,C#,Visual Studio,Dependency Injection,使用依赖项注入(DI)时,在VisualStudio2008中提供平滑调试体验的最佳实践是什么 具体来说,假设我有一个包含3个项目的解决方案: 我的解决方案: -控制台 -服务接口 -混凝土服务 ConsoleApp引用ServiceInterface项目,并使用DI容器解析具体类型(来自ConcreteService项目) 启动调试时,除非ConsoleApp bin\debug目录中存在ConsoleApp.dll,否则ConsoleApp将无法加载具体类型 问题是,如何将ConcreteS

使用依赖项注入(DI)时,在VisualStudio2008中提供平滑调试体验的最佳实践是什么

具体来说,假设我有一个包含3个项目的解决方案:

我的解决方案: -控制台 -服务接口 -混凝土服务

ConsoleApp引用ServiceInterface项目,并使用DI容器解析具体类型(来自ConcreteService项目)

启动调试时,除非ConsoleApp bin\debug目录中存在ConsoleApp.dll,否则ConsoleApp将无法加载具体类型

问题是,如何将ConcreteService.dll放入ConsoleApp的bin\debug文件夹?

我想到的一些选项是编译后脚本,将ConsoleApp中的项目引用添加到ConcreteService,并手动复制dll


所有这些方法都有一些优点/缺点,因此我很好奇是否还有其他方法,如果没有,人们更喜欢哪种方法。

只需添加一个具体实现的参考


顺便说一句,在架构上,将接口和实现放在同一个程序集中是完全可以的。您可能有很好的理由不这样做,但人们似乎本能地回避了这一点,但没有很好的理由。

您可以将每个项目的输出目录更改为相同的目录。我使用了MySolution\Debug调试DI项目,以避免添加引用

针对第一条评论


如果有多个应用程序使用DI获得相同的依赖关系,该怎么办?例如,如果我有一个由多个应用程序使用的公共数据访问层

很可能可以将所有内容转储到同一个调试文件夹中以获得解决方案。一次只调试一个应用程序,只要测试发布版本,就可以了


您还可以为解决方案中的各种应用程序创建不同的生成配置,并为每个配置将输出文件夹设置为MySolution\ConfigurationXDebug(或类似的设置)。这样做还有一个额外的好处,即您可以明确选择构建适当的项目,但需要进行更多的设置。

我的理解是,您的应用程序项目没有对包含服务器的项目的引用是正确的吗?如果是这样,则不需要,您需要提供生成后脚本,使用适当的生成操作将dll添加到项目中,或者自己手动复制文件。或者,您的IoC容器是否可以配置为从其他地方加载服务?是的,您是正确的。我不认为您列出的任何解决方案都是理想的,所以只需要寻找最差的解决方案的反馈。我通常会将默认实现与接口放在同一个程序集中。正如你提到的那样,这让事情变得更容易。在本例中,我希望提供一个不同于默认实现的实现。关于引用实现,我有两个疑问:1)诱使人们直接实例化它,而不是通过容器;2)一旦引用实现,我就必须引用它的依赖项,等等。有些东西让人感觉不那么清晰。@PeterM:“一旦我引用了实现,我就必须引用它的依赖关系”->不一定是真的,除非你实际使用了实现类型(或者是名称空间?我永远不记得了),如果你有多个应用程序使用DI来获取相同的依赖关系呢?例如,如果我有一个由多个应用程序使用的公共数据访问层,那么将所有内容转储到同一个调试文件夹是一个有趣的想法。实际上,我有多个使用相同二进制文件的解决方案,但这仍然适用于此设置。为了遵循stackoverflow关于开放式问题的常见问题解答的指导,我将此标记为答案,但我希望看到其他想法。我最终采用了这些方法的组合。见: