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

时间:2019-05-05 08:28:02

标签: c# service asp.net-core-mvc nuget configure

我正在为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软件包,我的AddMvc()中的AddMyNugetPackageName()会取代他们的AddMvc()中的CongifureServices()吗?这会给最终用户带来麻烦吗?

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

请帮助我。

谢谢

阿卜杜勒

1 个答案:

答案 0 :(得分:1)

您可以使用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();