【发布时间】:2022-11-12 14:52:18
【问题描述】:
我有以下 Main 类,它将 dataStore 作为 Foo 类的构造函数参数。
在 Main 类中,我只想将一个构造函数“dataStore”传递给 Foo,但在 Foo 构造函数类中,除了 dataStore 之外,我还想初始化一些其他服务。
public class Main
{
private DataStore dataStore = new DataStore();
public Main()
{
var foo = new Foo(dataStore);
foo.DoSomething();
}
}
我已经尝试使用链接 Foo 构造函数的这种方法,但只有 dataStore 被初始化, 在这种情况下,_serviceOne 和 _serviceTwo 为 null(因为我在构造函数链接中传递了 null,而第二个构造函数从未被调用)。
public class Foo
{
private readonly DataStore _dataStore;
private readonly IServiceOne _serviceOne;
private readonly IServiceTwo _serviceTwo;
public Foo(DataStore dataStore) : this(null, null)
{
_dataStore = dataStore;
}
public Foo(IServiceOne serviceOne, IServiceTwo serviceTwo)
{
_serviceOne = serviceOne;
_serviceTwo = serviceTwo;
}
public void DoSomething()
{
// do something
}
}
如果我尝试将所有数据仅传递给一个 Foo 构造函数,我需要在 Main 类中传递 _dataStore 、 _serviceOne 和 _serviceTwo 作为 Foo 的参数,而我不这样做。
public Foo(DataStore dataStore, IServiceOne serviceOne, IServiceTwo serviceTwo)
{
_dataStore = dataStore;
_serviceOne = serviceOne;
_serviceTwo = serviceTwo;
}
有没有办法在 Main 类中只传递 dataStore 作为参数,并在 Foo 构造函数类中初始化所有字段(_dataStore,_serviceOne,_serviceTwo)?
本质上,我只将 dataStore 传递给 Foo 并在 Foo 类本身中实例化其余服务:
var foo = new Foo(dataStore);
【问题讨论】:
-
在任何情况下,这些 -
_dataStore、_serviceOne或_serviceTwo- 应该为空吗?那会很奇怪。如果没有向构造函数传递任何内容,您是否打算让Foo创建某个类的实例并将其分配给该字段? -
本质上,我只将数据传递给 Foo ``` var foo = new Foo(dataStore); ``` 并实例化 Foo 类本身中的其余服务
-
在您开始输入之前 - 我建议您编辑问题,而不是将其放在评论中。最好不需要通读 cmets 就可以明确问题。
标签: c# class dependency-injection constructor chaining