C# 将接口传递给类构造函数

C# 将接口传递给类构造函数,c#,C#,我使用的语言是C 我想问一个关于建筑性质的问题 假设我们有classA: public class classA { public IParameters Parameters {get; set;} public classA(IParameters parameters) { Parameters = parameters; } // here goes the methods of the class } iParMaters的界面如下所

我使用的语言是C

我想问一个关于建筑性质的问题

假设我们有classA:

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

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

   // here goes the methods of the class

}
iParMaters的界面如下所示:

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参数=新的{….};我们应该定义一个实现这个接口的类。因为这个接口没有方法,只有属性,所以只实现这个接口的所有类都是这些属性的副本,它们不包含任何功能

让classB实现IPParameters:

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有大量代码需要重构。对于它使用的某些类型,它应该通过从构造函数中获取的值来创建它们,因为构造函数有太多的参数。我突然想到的一件事是,把所有这些类的参数都排除在外。然后,我认为最好将实现特定接口的类型传递给它的构造函数,而不是具体的类型,因为它将来可能会更改

我想知道以上的建议是否值得


提前感谢您的帮助

是的,您实现了
依赖注入
,模式为
固态。

链接:

这个概念帮助您轻松定义
单元测试
,从而在接口上创建存根或模拟

将来,您还可以定义
容器单元
,以初始化这些对象


对我来说很好

你问的问题真的不清楚,但我个人看不出当前架构有什么问题。这并不少见。它更倾向于国际奥委会图书馆。我认为你提出的修改似乎很好。这个问题似乎离题了。它适合@MichaelPerrenoud你所说的“当前架构”是什么意思?在我看来,当前的体系结构似乎有大量的参数传递给构造函数,然后这些参数被用来创建各种其他类。@MatthewWatson,我想我要说的是,在构造函数中接收接口的实例对我来说似乎很好。但再一次,我们非常不清楚被问到了什么,甚至现在还不清楚什么是存在的,所以我只是说这样做并没有本质上的错误。