我有这样的课:
public class GameSettingOptions
{
public const string GameSettings = "GameSettings";
public int gameId { get; set; }
public string iconSize { get; set; }
public int sortOrder { get; set; }
public string[] chips { get; set; }
}
和一个像这样的 GameSettingsOptions.json 文件:
{
"GameSettings": [
{
"gameId": 1,
"iconSize": "big",
"sortOrder": 6
},
{
"gameId": 2,
"iconSize": "small",
"sortOrder": 4
},
{
"gameId": 3,
"iconSize": "medium",
"sortOrder": 2
},
{
"gameId": 4,
"iconSize": "small",
"sortOrder": 5
},
{
"gameId": 5,
"iconSize": "small",
"sortOrder": 8,
"chips": []
},
{
"gameId": 6,
"iconSize": "small",
"sortOrder": 7
},
{
"gameId": 7,
"iconSize": "big",
"sortOrder": 1,
"chips": []
},
]
}
我正在尝试使用选项模式通过这样的控制器返回这些游戏设置:
public class GameSettingsControllers : ControllerBase
{
private readonly GameSettingOptions _gameSettingOptions;
public GameSettingsControllers(IOptions<GameSettingOptions> gameSettingOptions)
{
_gameSettingOptions = gameSettingOptions.Value;
}
public object GetGameSettings()
{
return Content ($"gameId: {_gameSettingOptions.gameId}" + $"iconSize: {_gameSettingOptions.iconSize}"
+ $"sortOrder: {_gameSettingOptions.sortOrder}" + $"chips: {_gameSettingOptions.chips}");
}
}
这就是我设置 Startup.cs 文件以在IOptions
类上使用依赖注入的方式:
public Startup(IConfiguration configuration, IHostingEnvironment environment)
{
var builder = new ConfigurationBuilder()
.SetBasePath(environment.ContentRootPath)
.AddJsonFile("GameSettingOptions.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddCors(c =>
{
c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin());
});
services.Configure<GameSettingOptions>(options => Configuration.GetSection(GameSettingOptions.GameSettings).Bind(options));
}
然而,控制器总是返回 null。我不知道我是否在配置界面中使用了错误的方法。问题似乎在于 JSON 文件和 GameSettingOptions 类之间的绑定。因此,目前 API 不断返回:
gameId: 0iconSize: sortOrder: 0chips: