使用 IOptions 服务时未调用 mvc6 控制器操作

mvc6 controller action not called when using IOptions service

在一个 aspnet5/mvc6 项目中,我使用配置生成器从 appsettings.json:

读取设置
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
    builder.AddEnvironmentVariables();
    Configuration = builder.Build();
}

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
    services.AddMvc();
}

但是,当我尝试从控制器访问服务时,没有调用操作:

public IActionResult Index(IOptions<AppSettings> appSettings)
{
   return View();
}

如果我删除 appSettings 参数,则会正确调用该操作。 我没有收到错误消息。我需要额外的包裹吗?目前我正在使用以下依赖项:

"dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final"
  }

就像 haim770 评论的那样,我需要在控制器构造函数中注入 IOption。

public class HomeController : Controller
{
    public HomeController(IOptions<AppSettings> appSettings)
    {
        //logic
    }
}

如果你想通过动作参数注入你的选项,你需要用[FromServices]:

装饰你的选项参数
public IActionResult Index([FromServices] IOptions<AppSettings> appSettings)
{
   return View();
}

虽然肯定支持,但通常最好使用构造函数注入,正如 haim770 所建议的那样。