在 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();
我正在为 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();