- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在学习 ASP.NET Core,我看到注册 MVC 服务如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.MaxModelValidationErrors = 100;
});
}
我的问题是,为什么 AddMvc
方法需要 Action<MvcOptions>
形式的选项?为什么我不能只创建一个 MvcOptions
的实例?并将其传递给函数?
最佳答案
如果您查看 source对于 AddMvc
,您会看到它不会创建 MvcOptions
的实例给你:
public static IMvcBuilder AddMvc(this IServiceCollection services, Action<MvcOptions> setupAction)
{
...
var builder = services.AddMvc();
builder.Services.Configure(setupAction);
return builder;
}
相反,它使用 IServiceCollection.Configure
Hook 到更一般Options pattern in ASP.NET Core .在幕后,这添加了一个 IConfigureOptions<MvcOptions>
的实例。到依赖注入(inject)容器,它最终会在稍后的某个时间点运行您的委托(delegate)。
可以添加多个 IConfigureOptions<MvcOptions>
实例,将按注册顺序运行。还有 IServiceCollection.PostConfigure
, 它注册了 IPostConfigureOptions<MvcOptions>
的实例- 这些实例将在所有 IConfigureOptions<MvcOptions>
之后运行实例 ( docs )。
这一切都提供了一些灵 active 。您可以设置代表管道以配置 MvcOptions
按照设定的顺序,每个配置步骤可能来自其他项目等。您甚至可以自己调用 services.Configure<MvcOptions>(...)
在您调用 AddMvc
之前等
将 MVC 服务添加到 DI 时,可以使用 AddMvc
或 AddMvcCore
.在内部,AddMvc
电话 AddMvcCore
, 所以我们可以想到 AddMvc
作为 AddMvcCore
的某种扩展.
AddMvcCore
adds its own configuration ,而不是创建 MvcOptions
的实例本身。它添加了一组 IConfigureOptions<MvcOptions>
和 IPostConfigureOptions<MvcOptions>
到依赖注入(inject)容器。
这两个接口(interface)用来组装一种形式的管道,其中所有IConfigureOptions<MvcOptions>
首先运行(按照它们添加到 DI 的顺序)和所有 IPostConfigureOptions<MvcOptions>
第二个运行(再次,按顺序)。这允许 AddMvcCore
提供一些默认值(使用 IConfigureOptions<MvcOptions>
)并提供对 MvcOptions
进行更改的能力一旦应用了所有其他配置(使用 IPostConfigureOptions<MvcOptions>
)。
当您调用 AddMvc
时并提供一个委托(delegate),该委托(delegate)将在 IConfigureOptions<MvcOptions>
之后运行添加者 AddMvcCore
,它提供了在您的应用程序中覆盖这些默认值的能力。
关于c# - 为什么 AddMvc 需要 Action<MvcOptions> 而不是 MvcOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54147660/
当我尝试在 visual studio 2015 中构建项目时,我在 ConfigureServices 方法中遇到了问题。 最佳答案 检查您尝试使用的 asp.net-mvc 版本。看起来您正在混合
我试图找出为什么在所有文档中我看到 services.AddMvc或 services.AddMvcCore在 Startup.cs 但是在由 VS 创建的 ASP.NET Core MVC 3.1
为了能够在我的 ASP.NET Core 应用程序中添加 Controller ,我可以添加 services.AddControllersWithViews() 要么 services.AddMvc
自 2018 年 5 月 30 日起,我在 Startup.cs 中的 ASP.NET Core 代码 public IServiceProvider ConfigureServices(IServi
我正在学习 ASP.NET Core,我看到注册 MVC 服务如下所示: public void ConfigureServices(IServiceCollection services) {
当我使用 Swagger 为我的 API 提供动力时,我遵循了 those guids 之一而且我总是像这样将 MVC 注入(inject)放在 Swagger 注入(inject)之前。 servi
我正在将 ASP.NET Core 2.2 Web 应用程序迁移到 3.0,并且有关于 .AddMvc() 的澄清问题。如果这很重要,我的应用程序使用 Razor 页面和 View 。 所以目前,我在
我使用以下命令创建了 .net core 2.0 mvc 应用程序:“dotnet new mvc”,它运行没有任何问题,但在 vscode 中我有两个错误: 'IServiceCollection'
我创建了一个全新的 asp.net 核心应用程序。我已经添加了 mvc Nuget 包,但出现以下错误。 微软.AspNetCore.Mvc.Core 1.1.3 'IServiceCollectio
我正在为 Asp.Net Core 创建一个 Nuget 包。我想让配置变得简单。因此,我决定提供一种流畅的方法,将我的 Nuget 添加到 Asp.Net Core 中 ConfigureServi
我正在学习本教程:http://www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6设置一个 web api,但我还没
我正在看书学习ASP.NET Core MVC,问题代码片段如下: // CHAPTER 4 - ESSENTIAL C# FEATURES namespace LanguageFeatures {
当使用 .NET core Web API 的脚手架时,它包括: services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Vers
我不太喜欢使用预捆绑的 AddMvc(),而是更喜欢使用 AddMvcCore()。 话虽如此,我想知道如何将新的(从 2.0 开始)AddRazorPages() 与 AddMvcCore() 一起
为什么在 mvc6 应用程序的 Configuration 方法中只添加 app.UseMvc() 是不够的?为什么还需要在 ConfigureServices 方法中添加 services.AddM
我是一名优秀的程序员,十分优秀!