如何删除两个类之间的依赖关系?

时间:2017-05-01 08:17:50

标签: c# design-patterns

例如:

public class A {}

public class B
{
    public void test()
    {
        A obj = A();
    }
}

我只是寻找删除类AB之间依赖关系的最佳方法,或者如果在子类级别添加更多类,哪种设计模式最适合这种情况?

2 个答案:

答案 0 :(得分:6)

在构造函数中接收A的实例。更好的是让A继承一些接口并在构造函数中接收该接口。

public interface IA {}
public class A : IA {}

public class B 
{
    public IA AInstance { get; set; }
    public B (IA a)
    {
        AInstance = a;
    }

    public void test()
    {
        /* do something with `AInstance` */
    }
}

查看Dependency InjectionInversion of Control的概念:

  1. What is dependency injection?
  2. What is Inversion of Control?
  3. 并将其全部包裹在SOLID principals

    如果您无法将IA作为依赖项,但需要在B类中创建它的新实例,请使用Factory设计模式并让B依赖在某些ISomeFactory

    的实例上

答案 1 :(得分:0)

我建议您使用IoC作为设计模式。它消除了类的依赖性,并且可以在单元测试时模拟对象

https://msdn.microsoft.com/en-us/library/aa973811.aspx