gpt4 book ai didi

c# - 循环依赖 - 再一次

转载 作者:太空狗 更新时间:2023-10-29 20:02:13 24 4
gpt4 key购买 nike

我正在努力避免循环依赖。我知道我需要用接口(interface)隐藏实现,但我该如何处理两个程序集的情况,其中每个程序集都需要从另一个程序集实例化类或从那里调用静态方法?

编辑:

我知道这可以通过使用一个组件来解决。我们有不止一个,原因如下:

  • 我们的“系统”由多个组件组成。客户可以只有一个或多个组件 - 所以我们所做的是为不同的组件创建不同的组件。这有点道理 - 为什么要部署不需要的东西 - 这不是浪费内存吗?
  • 更多组件共有的东西,主要是辅助类,转到另一个程序集 - 同样不是所有组件都需要所有辅助类,所以有更多的程序集
  • 然而,这两个应用程序可以相互通信 - 医生系统向护士系统发送请求,请求返回等等 - 这就是实际问题所在

让两个组件相互通信实际上只是我们之前遇到过循环依赖冲突的情况之一。它时不时地发生,当它发生时,我们需要弄清楚如何解决它 - 移动一些类 - 有时我们需要添加一个新的程序集。

现在我们有大约 8-10 个程序集,看起来你拥有的越多,它们添加的速度就越快 :) - 例如,我们添加了一个使用自定义属性的通用功能 - 所以我们添加了另一个程序集属性 - 以防我们将来不会发生冲突

这是要走的路吗?我真的觉得我们在做一些根本性的错误:)

非常感谢您的意见。

最佳答案

我会尝试将有问题的类型拉出到两个“父”程序集引用的第三个“公共(public)”程序集中。

我会质疑为什么首先需要多个程序集,但是,当它们相互依赖时。程序集是部署单元,可以彼此分开进行版本控制。如果您不需要此功能,我会将所有内容打包到一个程序集中并完成它。这具有加快构建和简化部署的额外好处。

请尝试为您的问题添加更多上下文 - 如果我们确切知道您要做什么,也许我们可以提供一些帮助。

重新编辑您的添加内容:要具体回答您关于多个程序集是否可行的问题,请考虑以下事项:我曾经使用 Visual Studio 2008 开发过这样的代码库,其中一次在解决方案中打开大约 20 个单独的项目文件。这 20 个项目都支持单个主 EXE 的 DLL。这些项目没有与其他产品共享,也没有奇怪的版本控制要求。

使用这个解决方案是一场噩梦。 Visual Studio 编译解决方案实际上用了 5 分钟。使用 MSBuild 在命令行中编译需要 2 分钟。这使得进行渐进式更改成为一种沮丧和痛苦的练习。由于所有项目都用于制作主要可执行文件,因此无法卸载它们以加快编译速度,并且行政命令禁止将项目分解为单独的解决方案。

如果您最终得到这样的单一解决方案,请相信我,当我说您和您的队友总有一天会反抗时......我的建议是将程序集分解为他们自己的解决方案,将任何程序集组合在一起可能一起改变;然后创建一个自定义构建任务,将最终程序集复制到一个公共(public)文件夹中,所有其他程序集都可以从中引用。

关于c# - 循环依赖 - 再一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2051799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com