ASP.NET Core के सभी संस्करणों में इसे प्राप्त करने का सबसे सरल और सबसे सही तरीका है , IConfigureOptions<TOptions>
इंटरफ़ेस को लागू करना । जबकि यह .NET कोर 1.0 के बाद से आसपास है, ऐसा लगता है कि बहुत कम लोग जानते हैं कि यह कैसे काम करता है जस्ट वर्क ™ ।
एक उदाहरण के रूप में, आप एक कस्टम मॉडल सत्यापनकर्ता जोड़ना चाहते हैं जिसमें आपके आवेदन की अन्य सेवाओं में से एक पर निर्भरता है। प्रारंभ में यह असंभव लगता है - इसका कोई तरीका नहीं है IMyServiceDependency
क्योंकि आपके पास कोई एक्सेस नहीं है IServiceProvider
:
public class MyModelValidatorProvider : IModelValidatorProvider
{
public MyModelValidatorProvider(IMyServiceDependency dependency)
{
...
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.ModelValidatorProviders.Add(new MyModelValidatorProvider(??????));
});
}
लेकिन "जादू" IConfigureOptions<TOptions>
इसे इतना आसान बनाता है:
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();
...
// or scoped, or transient, as necessary for your service
services.AddSingleton<IConfigureOptions<MvcOptions>, ConfigureMvcOptions>();
}
अनिवार्य रूप से, Add***(***Options)
प्रतिनिधियों में आपके द्वारा किया गया कोई भी सेटअप ConfigureServices
अब आपकी IConfigureOptions<TOptions>
कक्षा की Configure
पद्धति में चला जाएगा। फिर आप उसी तरह से विकल्पों को पंजीकृत करते हैं जैसे आप किसी अन्य सेवा को पंजीकृत करते हैं, और आप चले जाते हैं!
अधिक विस्तार के लिए, साथ ही साथ पर्दे के पीछे यह कैसे काम करता है, इस बारे में जानकारी के लिए, मैं आपको हमेशा उत्कृष्ट एंड्रयू लॉक का संदर्भ देता हूं ।