ASP.NET Core'un tüm sürümlerinde bunu başarmanın en basit ve en doğru yolu IConfigureOptions<TOptions>
arabirimi uygulamaktır . Bu, .NET Core 1.0'dan beri var olmasına rağmen, pek az kişinin bunun işleri nasıl Just Work ™ yaptığını bildiği görülüyor .
Örnek olarak, uygulamanızın diğer hizmetlerinden birine bağımlı olan özel bir model doğrulayıcı eklemek istiyorsunuz. Başlangıçta imkansız görünüyor - çözmenin bir yolu yok IMyServiceDependency
çünkü şunlara erişiminiz yok IServiceProvider
:
public class MyModelValidatorProvider : IModelValidatorProvider
{
public MyModelValidatorProvider(IMyServiceDependency dependency)
{
...
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.ModelValidatorProviders.Add(new MyModelValidatorProvider(??????));
});
}
Ama "büyüsü" IConfigureOptions<TOptions>
bunu çok kolaylaştırıyor:
public class ConfigureMvcOptions : IConfigureOptions<MvcOptions>
{
private IMyServiceDependency _dependency;
public MyMvcOptions(IMyServiceDependency dependency)
=> _dependency = dependency;
public void Configure(MvcOptions options)
=> options.ModelValidatorProviders.Add(new MyModelValidatorProvider(_dependency));
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
...
services.AddSingleton<IConfigureOptions<MvcOptions>, ConfigureMvcOptions>();
}
Esasen, Add***(***Options)
temsilcilerde yapacağınız herhangi bir kurulum ConfigureServices
artık IConfigureOptions<TOptions>
sınıfınızınConfigure
yöntemine . Daha sonra, diğer herhangi bir hizmeti kaydettiğiniz gibi seçenekleri de kaydedersiniz ve gidin!
Daha fazla ayrıntı ve bunun perde arkasında nasıl çalıştığı hakkında bilgi için sizi her zaman mükemmel olan Andrew Lock'a yönlendiriyorum .