You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#12主构造函数中修改传入的依赖注入参数后使用?

主构造函数中如何处理注入参数并直接使用处理后的值?

使用C#主构造函数确实能简化代码,但默认只能直接使用注入的原始参数。比如传统构造函数中我们可以把IOptions<MySettings>的Value提取为私有字段:

public class MyService
{
  private MySettings _settings;

  public MyService(IOptions<MySettings> mySettingsOptions)
  {
    _settings = mySettingsOptions.Value;
  }
}

而主构造函数的初始写法只能直接用settings.Value:

public class MyService(IOptions<MySettings> settings)
{
}

想要直接使用处理后的MySettings实例,有两种简单的实现方式:

方式一:初始化私有只读字段

在主构造函数体内直接声明并初始化私有字段,将settings.Value赋值给它,后续类内代码直接使用该字段即可:

public class MyService(IOptions<MySettings> settings)
{
    private readonly MySettings _settings = settings.Value;
    
    // 示例用法
    public void DoSomething()
    {
        Console.WriteLine(_settings.SomeProperty);
    }
}

这种方式会在类实例化时一次性获取Value,适合不需要动态更新配置的场景。

方式二:定义只读属性

如果需要动态获取最新配置(比如使用IOptionsSnapshot<MySettings>注入时),可以定义一个只读属性,每次访问时自动获取settings.Value:

public class MyService(IOptionsSnapshot<MySettings> settings)
{
    private MySettings Settings => settings.Value;
    
    // 示例用法
    public void DoSomething()
    {
        Console.WriteLine(Settings.SomeProperty);
    }
}

这样每次调用Settings都会拿到最新的配置实例,适合配置可能动态变更的场景。


内容的提问来源于stack exchange,提问作者Carlo Bos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:55:02