C#报错:字段初始化器无法引用非静态成员(构造函数已初始化)
报错原因
C# 实例字段初始化器的执行顺序先于构造函数内的逻辑。你在类层级直接声明cloud、apiKey、apiSecret、_cloudinary并赋值时,构造函数中给_cloudinaryConfig的赋值操作还未执行,此时_cloudinaryConfig是尚未赋值的非静态实例字段,无法被字段初始化逻辑引用,因此触发该编译错误。
另外你的原代码存在冗余写法问题:创建Cloudinary实例时嵌套了两层new Cloudinary(),Cloudinary构造函数本身支持直接传入Account类型参数,外层嵌套属于无效代码。
修复方案
将所有依赖_cloudinaryConfig的初始化逻辑,全部移动到构造函数内部,放在_cloudinaryConfig赋值语句之后执行即可,修正后的完整代码如下:
private IAppRepository _appRepository; private IMapper _mapper; private IOptions<CloudinarySettings> _cloudinaryConfig; private readonly Cloudinary _cloudinary; public PhotosController( IAppRepository appRepository, IMapper mapper, IOptions<CloudinarySettings> cloudinaryConfig) { _appRepository = appRepository; _mapper = mapper; _cloudinaryConfig = cloudinaryConfig; // 读取配置 string cloud = _cloudinaryConfig.Value.CloudName; string apiKey = _cloudinaryConfig.Value.ApiKey; string apiSecret = _cloudinaryConfig.Value.ApiSecret; // 初始化Cloudinary实例,移除冗余嵌套 _cloudinary = new Cloudinary(new Account(cloud, apiKey, apiSecret)); }
内容的提问来源于stack exchange,提问作者hhuseyin
相关产品推荐
相关产品推荐

