【问题标题】:Should I use AddMvc or AddMvcCore for ASP.NET Core MVC development?我应该使用 AddMvc 还是 AddMvcCore 进行 ASP.NET Core MVC 开发?
【发布时间】:2016-10-17 23:29:45
【问题描述】:

我正在从一本书中学习ASP.NET Core MVC,有问题的代码sn-p如下:

// CHAPTER 4 - ESSENTIAL C# FEATURES
namespace LanguageFeatures {

    public class Startup {

        public void ConfigureServices(IServiceCollection services) {
            services.AddMvc();
        }

        // etc.

因为这本书是关于 ASP.NET Core MVC 而不是 ASP.NET MVC,所以我认为我必须使用AddMvcCore() 而不是AddMvc(),如下所示:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore(); // as opposed to:
    //services.AddMvc();
}

我在这里做的正确吗?

【问题讨论】:

  • @mason:我更喜欢请教专家,因为这比在黑匣子上反复试验更可靠。
  • @SingleFighter 考虑到我刚刚发布了一个包含AddMvc() 内部工作原理的答案,这并不是真正的黑匣子;)
  • @mas,这是一个很好的问题,值得一问……编程就是要问和实验一样多,哈哈

标签: c# asp.net-core-mvc


【解决方案1】:

看看ASP.NET Core GitHub repo上的MvcServiceCollectionExtensions.cs类:

public static IMvcBuilder AddMvc(this IServiceCollection services)
{
    if (services == null)
    {
        throw new ArgumentNullException(nameof(services));
    }

    var builder = services.AddMvcCore();

    builder.AddApiExplorer();
    builder.AddAuthorization();

    AddDefaultFrameworkParts(builder.PartManager);

    // Order added affects options setup order

    // Default framework order
    builder.AddFormatterMappings();
    builder.AddViews();
    builder.AddRazorViewEngine();
    builder.AddRazorPages();
    builder.AddCacheTagHelper();

    // +1 order
    builder.AddDataAnnotations(); // +1 order

    builder.AddCors();

    return new MvcBuilder(builder.Services, builder.PartManager);
}

AddMvcCore()AddMvc() 都返回一个 IMvcBuilder,可用于进一步配置 MVC 服务。

AddMvcCore(),顾名思义,只添加MVC管道的核心组件,需要你自己添加任何其他中间件(你的项目需要)。

AddMvc() 内部调用AddMvcCore() 并添加其他中间件,例如 Razor 视图引擎、Razor 页面、CORS 等。

目前,我会按照您的教程建议并坚持使用AddMvc()


从 ASP.NET Core 3.0 开始,还有一些额外的方法可以细粒度地控制 MVC 管道的哪些部分可用于您的应用程序,例如:

请参阅this article 和 MSDN,了解有关它们的作用以及何时使用它们的更多信息。

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多