Pelbagai perkhidmatan untuk melaksanakan pelbagai perkhidmatan di ASP.NET Core
Dalam teras ASP.NET, pelbagai perkhidmatan sering menemui antara muka yang sama. Untuk mengendalikan keadaan ini dengan berkesan, kita mesti memahami bagaimana untuk mendaftarkan perkhidmatan ini dan bagaimana menggunakan pengecam perbezaan untuk menyelesaikannya semasa runtime.
Pendaftaran Perkhidmatan
Dalam teras ASP.NET, anda boleh mendaftarkan perkhidmatan dalam kaedah kelas permulaan. Biasanya, kami berdaftar seperti ini:
Walau bagaimanapun, kaedah ini tidak dapat membezakan antara perkhidmatan yang berbeza, yang membatasi keupayaan kami untuk menganalisisnya pada masa akan datang. ConfigureServices
Gunakan kunci untuk menganalisis services.AddTransient<IService, ServiceA>();
services.AddTransient<IService, ServiceB>();
Salin selepas log masuk
Untuk menyelesaikan perkhidmatan berdasarkan kunci, kami memerlukan mekanisme untuk memetakan kunci kepada pelaksanaan perkhidmatan. Ini boleh dilaksanakan menggunakan komisen:
kita boleh mendaftarkan komisen ini sebagai perkhidmatan sementara dan memetakannya ke pelaksanaan perkhidmatan:
<> suntikan bergantung pada pembina public delegate IService ServiceResolver(string key);
Salin selepas log masuk
Walaupun kaedah di atas adalah sah, ia menghalang kami daripada suntikan data statik ke dalam pembina semasa tempoh pendaftaran. Untuk mengatasi had ini, kita boleh menggunakan mod services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
switch (key)
{
case "A":
return serviceProvider.GetService<ServiceA>();
case "B":
return serviceProvider.GetService<ServiceB>();
default:
throw new KeyNotFoundException();
}
});
Salin selepas log masuk
, yang menyediakan kaedah suntikan tetapan:
maka kita boleh mengakses pilihan ini dalam pembina perkhidmatan:
IOptions
<论> Kesimpulan
services.Configure<ServiceAOptions>(options =>
{
options.ConnectionString = "connectionStringA";
});
Salin selepas log masuk
Dengan menggunakan mod Suruhanjaya dan
, kami dapat mendaftar dan menganalisis pelbagai perkhidmatan dalam Core ASP.NET, dan pada masa yang sama, kami juga boleh menyuntik suntikan pembina untuk data statik. Kaedah ini menyediakan penyelesaian yang fleksibel dan boleh dipelihara untuk item ketergantungan kompleks. public ServiceA(IOptions<ServiceAOptions> options)
{
_connectionString = options.Value.ConnectionString;
}
Salin selepas log masuk
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan dan menyelesaikan pelbagai pelaksanaan perkhidmatan dengan kekunci yang berbeza dalam teras ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!