如何在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
相关产品推荐
相关产品推荐

