Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk melaksanakan dan menyelesaikan pelbagai pelaksanaan perkhidmatan dengan kekunci yang berbeza dalam teras ASP.NET?

Bagaimana untuk melaksanakan dan menyelesaikan pelbagai pelaksanaan perkhidmatan dengan kekunci yang berbeza dalam teras ASP.NET?

DDD
Lepaskan: 2025-01-29 21:26:10
asal
953 orang telah melayarinya

How to Implement and Resolve Multiple Service Implementations with Different Keys in ASP.NET Core?

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan