یک نکتهی تکمیلی: تعریف متد AddConfig و عدم نیاز به استفادهی از IOptions برای کار با آن
کدهای متد الحاقی AddConfig زیر:
services.AddConfig<MySettings>(Configuration.GetSection("MySettings"));
به این صورت تعریف شدهاست:
public static class ServiceCollectionExtensions
{
public static TSettings AddConfig<TSettings>(this IServiceCollection services, IConfiguration configuration)
where TSettings : class, new()
{
return services.AddConfig<TSettings>(configuration, options => { });
}
public static TSettings AddConfig<TSettings>(this IServiceCollection services, IConfiguration configuration, Action<BinderOptions> configureOptions)
where TSettings : class, new()
{
if (services == null) { throw new ArgumentNullException(nameof(services)); }
if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); }
TSettings setting = configuration.Get<TSettings>(configureOptions);
services.TryAddSingleton(setting);
return setting;
}
}
در اینجا وهلهای از کلاس تنظیم خوانده شده را به صورت Singleton در سیستم ثبت میکند. بنابراین برای دریافت آن در برنامه، الزامی به استفادهی از اینترفیس IOptions نبوده و میتوان مستقیما خود کلاس تنظیم را به سازندهی کلاس استفاده کنندهی از آن تزریق کرد:
private readonly MySettings _settings;
public MyViewComponent(MySettings settings)
{
_settings = settings;
}
مزیت آن حذف وابستگی مرتبط با IOptions در قسمتهای مختلف برنامه است.