如何使用C#12主构造函数初始化普通类
C#12主构造函数转换AutoHttpClient的说明
原代码逻辑
原代码是无参构造实现,类内部自行实例化HttpClient,属于类自主管理依赖的场景。
疑惑代码的问题
你写的这段代码:
internal class AutoHttpClient(HttpClient httpClient) : IAutoHttpClient { }
是依赖注入场景的标准主构造写法,但和原代码的逻辑完全不同:
- 原代码:类自己创建并持有
HttpClient实例 - 疑惑代码:要求外部传入
HttpClient实例,依赖由外部(比如DI容器)负责创建和注入
匹配原代码逻辑的主构造写法
如果要保留原代码“自行初始化HttpClient”的逻辑,用C#12语法可以简化为:
internal class AutoHttpClient : IAutoHttpClient { private readonly HttpClient httpClient = new HttpClient(); }
要是一定要显式用无参主构造(其实可以省略),写法如下:
internal class AutoHttpClient() : IAutoHttpClient { private readonly HttpClient httpClient = new HttpClient(); }
主构造函数的核心适用场景
- 当类需要外部提供依赖时(比如依赖注入),带参数的主构造是最优写法,你的疑惑代码本身是这种场景的正确实现,只是和原代码逻辑不匹配
- 当类自主管理内部依赖时,直接初始化字段比主构造更简洁,没必要强行用主构造
内容的提问来源于stack exchange,提问作者tase akpo
相关产品推荐
相关产品推荐

