【问题标题】:Circular DLL dependencies in .NET.NET 中的循环 DLL 依赖项
【发布时间】:2012-01-16 02:06:31
【问题描述】:

我有一个 DLL,它提供了一个 ASP.MVC 应用程序的入口点。我们称之为 Primary.DLL。在 Primary.DLL 中,定义了 LINQ-to-SQL 数据上下文和其他类。在Application_Start() 的某处,调用Assembly.Load() 来加载Secondary.DLL。 Primary.DLL 的项目文件中未引用辅助节点。但是在Secondary.DLL的项目文件中引用了Primary,因为在Secondary中使用了LINQ-to-SQL数据上下文和上面提到的其他类。

这会产生循环依赖问题吗?这样的设计会有问题吗?

【问题讨论】:

  • 您是否遇到了具体问题?
  • 顺便说一句,如果你以某种方式欺骗编译器生成它们,循环依赖就会起作用,这不是问题。

标签: .net circular-dependency


【解决方案1】:

我们一直使用客户特定的自定义 DLL 来做到这一点。我们在 Web 应用程序、服务和桌面 exe 中使用相同的功能。

客户 DLL 引用基础项目 DLL,以便它们可以从各种类继承并实现接口。为此,它们必须具有对基本 dll 的引用。

在应用程序启动时(global.asax Application_Start 或 exe 的初始化例程),我们通过 Assembly.Load 加载任何发现的自定义 DLL,它肯定不会创建交叉引用。

【讨论】:

  • 这正是我想要做的自定义。 “契约”类和接口定义明确,但实现会年复一年。未来的 DLL 是在运行时发现的,但要构建(编译)它们,它们必须引用基础 DLL 中定义的一些类和接口。
【解决方案2】:

程序集不会重新加载到 AppDomain 中,您只是在 Application_Start 中加载 Secondary.dll,因此这不会导致任何问题,也不会导致任何循环依赖的表现。

【讨论】:

    【解决方案3】:

    它不会产生循环依赖问题,但它可能不是一个好的设计。循环依赖需要两个或多个项目之间的实际引用。

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 2018-03-03
      • 1970-01-01
      • 2020-11-18
      • 2020-03-14
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 2021-05-01
      相关资源
      最近更新 更多