【问题标题】:Solution for circular dependency [closed]循环依赖的解决方案[关闭]
【发布时间】:2014-10-17 13:24:58
【问题描述】:

我在两个项目中有以下两个类,每个类都需要调用其他类方法。 但不能相互添加引用,因为它正在创建循环依赖。

我知道我必须使用界面来解决问题,但我无法给出答案。 请让我知道如何实施和解决此问题。

项目Test2

 namespace Test2
    {
       public  class ClassTest2 
        {
            public string GetClassTest2()
            {
                return "classTest2";
            }
        }
    }

项目测试1

namespace Test1
{
   public class ClassTest1
   {
        public string GetClassTest1()
        {
            return "classTest1";
        }
    }
}

【问题讨论】:

  • 您的各个类将如何获得另一个类的实例?
  • 代码示例在这里没有添加任何内容——它们似乎并不代表实际的问题场景,因为它们显示的只是两个完全独立的类。另外,请解释是什么障碍阻止您将这两个类放在一个项目中。
  • 不能从Test1调用GetClassTest2,从Test2调用GetClassTest1
  • 了解如何使用events解耦代码。

标签: c# .net visual-studio-2012 interface circular-dependency


【解决方案1】:

您需要在其中定义接口的第三个项目:

public interface IClassNameAware
{
    string GetClassName();
}

从两个现有项目中,引用这个新程序集并使类实现接口:

public class ClassTest1 : IClassNameAware
{
    public string GetClassName()
    {
        return "classTest1";
    }

现在两个类仍然不能直接互相访问,但它们确实接受IClassNameAware变量,即:

    public bool ClassNamesEqual(IClassNameAware otherClass)
    {
        return GetClassName().Equals(otherClass.GetClassName());
    }
}

【讨论】:

  • 另一种方法是创建一个单独的程序集来保存第一类和第二类的接口。然而,任何需要这种“黑客”来完成的设计都需要重新考虑。
  • @Cameron 在单独的程序集中定义接口是很常见的(我将其称为“项目”,因为这是 OP 使用的术语)。想想 ADO.NET 和单独的提供程序。创建一个包装另一个底层实现以添加抽象层的实现也是有意义的。 OP 没有分享他的意图,但我不同意它本身就是一个 hack。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多