98 lines
3.6 KiB
C#
98 lines
3.6 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
|
using Microsoft.AspNetCore.Mvc.Internal;
|
|
using Microsoft.AspNetCore.Mvc.Razor.TagHelpers;
|
|
using Microsoft.AspNetCore.Mvc.TagHelpers;
|
|
|
|
namespace Microsoft.Extensions.DependencyInjection
|
|
{
|
|
/// <summary>
|
|
/// Extension methods for setting up MVC services in an <see cref="IServiceCollection" />.
|
|
/// </summary>
|
|
public static class MvcServiceCollectionExtensions
|
|
{
|
|
/// <summary>
|
|
/// Adds MVC services to the specified <see cref="IServiceCollection" />.
|
|
/// </summary>
|
|
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
|
/// <returns>An <see cref="IMvcBuilder"/> that can be used to further configure the MVC services.</returns>
|
|
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.AddCacheTagHelper();
|
|
|
|
// +1 order
|
|
builder.AddDataAnnotations(); // +1 order
|
|
|
|
// +10 order
|
|
builder.AddJsonFormatters();
|
|
|
|
builder.AddCors();
|
|
|
|
return new MvcBuilder(builder.Services, builder.PartManager);
|
|
}
|
|
|
|
private static void AddDefaultFrameworkParts(ApplicationPartManager partManager)
|
|
{
|
|
var mvcTagHelpersAssembly = typeof(InputTagHelper).GetTypeInfo().Assembly;
|
|
if(!partManager.ApplicationParts.OfType<AssemblyPart>().Any(p => p.Assembly == mvcTagHelpersAssembly))
|
|
{
|
|
partManager.ApplicationParts.Add(new AssemblyPart(mvcTagHelpersAssembly));
|
|
}
|
|
|
|
var mvcRazorAssembly = typeof(UrlResolutionTagHelper).GetTypeInfo().Assembly;
|
|
if(!partManager.ApplicationParts.OfType<AssemblyPart>().Any(p => p.Assembly == mvcRazorAssembly))
|
|
{
|
|
partManager.ApplicationParts.Add(new AssemblyPart(mvcRazorAssembly));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Adds MVC services to the specified <see cref="IServiceCollection" />.
|
|
/// </summary>
|
|
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
|
/// <param name="setupAction">An <see cref="Action{MvcOptions}"/> to configure the provided <see cref="MvcOptions"/>.</param>
|
|
/// <returns>An <see cref="IMvcBuilder"/> that can be used to further configure the MVC services.</returns>
|
|
public static IMvcBuilder AddMvc(this IServiceCollection services, Action<MvcOptions> setupAction)
|
|
{
|
|
if (services == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(services));
|
|
}
|
|
|
|
if (setupAction == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(setupAction));
|
|
}
|
|
|
|
var builder = services.AddMvc();
|
|
builder.Services.Configure(setupAction);
|
|
|
|
return builder;
|
|
}
|
|
}
|
|
}
|