在 Asp.Net 核心中,在 ConfigureServices() 中添加两次 AddMvc() 服务是否是一个好习惯?

Is adding AddMvc() Service twice in ConfigureServices() a good practice in Asp.Net Core?

我正在为 Asp.Net Core 创建一个 Nuget 包。我想让配置变得简单。因此,我决定提供一种流畅的方法,将我的 Nuget 添加到 Asp.Net Core.ConfigureServices() 中的服务集合中。

我打算这样做:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(options => options....);

    services.AddMyNugetPackageName();
}

在我的 AddMyNugetPackageName() 方法中,

public static IServiceCollection AddMyNugetPackageName(this IServiceCollection services)
{
    services
        .AddMvc(options => options.ModelBinderProviders.Insert(0, new MyModelBinderProvider()))
        .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());

    return services;
}

那么现在如果人们开始使用我的 Nuget 包,我的 AddMyNugetPackageName() 中的 AddMvc() 会替换他们 ConfigureServices() 中的 AddMvc() 吗?会不会给终端用户带来麻烦?

如果这将替换用户 ConfigureServices() 中的 AddMvc() 那么最好的方法是什么或如何处理这个问题?

您可以使用 IConfigureOptions 模式从您的 nuget 包中注入 MvcOptions 配置

public class MyConfigureOptions : IConfigureOptions<MvcOptions>
{
    public void Configure(MvcOptions options)
    {
        options.ModelBinderProviders.Insert(0,new MyModelBinderProvider());
    }
}

使用ConfigureOptions注册您的选项

public static IServiceCollection AddMyNugetPackageName(this IServiceCollection services)
{
    services.ConfigureOptions<MyConfigureOptions>();
}

将您的 nuget 服务添加到服务集合

services.AddMvc();
services.AddMyNugetPackageName();