c# – 为什么AddMvc需要Action而不是MvcOptions?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 为什么AddMvc需要Action而不是MvcOptions?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1951字,纯文字阅读大概需要3分钟。
内容图文
![c# – 为什么AddMvc需要Action而不是MvcOptions?](/upload/InfoBanner/zyjiaocheng/754/359c3784dee04930a612122d9f01973b.jpg)
我正在学习ASP.NET Core,我看到注册MVC服务看起来像这样:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.MaxModelValidationErrors = 100;
});
}
我的问题是,为什么AddMvc方法需要Action< MvcOptions>?形式的选项?为什么我不能只创建一个MvcOptions实例并将其传递给函数?
解决方法:
如果你看一下source for AddMvc,你会发现它没有为你创建一个MvcOptions实例:
public static IMvcBuilder AddMvc(this IServiceCollection services, Action<MvcOptions> setupAction)
{
...
var builder = services.AddMvc();
builder.Services.Configure(setupAction);
return builder;
}
相反,它使用IServiceCollection.Configure挂钩到更一般的Options pattern in ASP.NET Core.在幕后,这将向依赖注入容器添加一个IConfigureOptions<MvcOptions>的实例,这将最终在某个时间点运行您的委托.
可以添加IConfigureOptions< MvcOptions>的多个实例,这些实例将按注册顺序运行.还有IServiceCollection.PostConfigure,其注册IPostConfigureOptions<MvcOptions>的实例 – 这些实例将在所有IConfigureOptions< MvcOptions>之后运行.实例(docs).
这一切都提供了一些灵活性您可以设置代理管道,以便按设置顺序配置MvcOptions,其中每个配置步骤可能来自其他项目等.您甚至可以在调用之前自己调用services.Configure< MvcOptions>(…)添加MV等
将MVC服务添加到DI时,可以使用AddMvc或AddMvcCore.在内部,AddMvc调用AddMvcCore,因此我们可以将AddMvc视为AddMvcCore的某种扩展.
AddMvcCore adds its own configuration,使用Options pattern in ASP.NET Core. AddMvcCore不是创建MvcOptions本身的实例,而是将一组IConfigureOptions<MvcOptions>和IPostConfigureOptions<MvcOptions>添加到依赖注入容器中.
这两个接口用于组装管道形式,其中所有IConfigureOptions< MvcOptions>首先运行(按照它们添加到DI的顺序)和所有IPostConfigureOptions< MvcOptions>第二次运行(再次,按顺序).这允许AddMvcCore提供一些默认值(使用IConfigureOptions< MvcOptions>),并且还可以在应用所有其他配置后使用IPostConfigureOptions< MvcOptions>来更改MvcOptions.
当您调用AddMvc并提供委托时,所述委托将在IConfigureOptions< MvcOptions>之后运行.由AddMvcCore添加,它提供了在应用程序中覆盖这些默认值的功能.
内容总结
以上是互联网集市为您收集整理的c# – 为什么AddMvc需要Action而不是MvcOptions?全部内容,希望文章能够帮你解决c# – 为什么AddMvc需要Action而不是MvcOptions?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。