C# 将接口传递给类构造函数
我使用的语言是C 我想问一个关于建筑性质的问题 假设我们有classA: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的界面如下所
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,我想我要说的是,在构造函数中接收接口的实例对我来说似乎很好。但再一次,我们非常不清楚被问到了什么,甚至现在还不清楚什么是存在的,所以我只是说这样做并没有本质上的错误。