将接口传递给类构造函数

时间:2013-11-29 15:30:49

标签: c#

我使用的语言是C#。

我想问一个建筑性质的问题。

假设我们有classA:

public class classA
{
   public IParameters Parameters {get; set;}

   public classA(IParameters parameters)
   {
       Parameters = parameters;
   }

   // here goes the methods of the class

}

接口IParamaters如下:

public Interface IParameters
{
    public int Id {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public DateTime CreatedOn {get; set;}
    public TypeA A {get; set;}
    public TypeB B {get; set;}
}

假设我们想要实例化ClassA类型的对象。然后我们应该向它的构造函数传递一个对象,它实现了接口IParameters。

由于这个事实,我们无法实例化一个接口,换句话说就是写 IParameters parameters = new {....};我们应该定义一个实现这个接口的类。由于此接口没有方法,并且它只具有属性,所有只实现此接口的类,并且它们不包含任何功能,因此将是所有这些属性的副本。

让classB实现IParameters:

public class classB : IParameters
{
    public int Id {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public DateTime CreatedOn {get; set;}
    public TypeA A {get; set;}
    public TypeB B {get; set;}
}

然后,如果我们想要实例化一个classA类型的对象,我们应该首先实例化一个classB的对象,如下所示:

classB b = new classB(){ .... };
classA a = new classA(b);

我之所以如此认为是在另一个类中我必须创建一个classA对象的事实。不幸的是,classA有大量代码需要重构。它使用的一些类型,应该通过它的构造函数创建它们,它的构造函数太多了。因此,我想到的其中一件事就是将课程的所有这些参数都带到了它之外。然后我虽然最好将它的conructor传递给一个实现特定接口而不是具体类型的类型,因为它可能在将来发生变化。

我想知道以上的配件是否值得。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

是的,您实施dependency injection,模式为SOLID.

link:http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

此概念可帮助您定义unit test easily,从而在界面上创建存根或模拟。

为了将来你也可以定义container Unity来初始化这些对象。

对我有好处

相关问题