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
DDDasal
2025-01-29 21:26:10954semak imbas

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
<code class="language-csharp">services.AddTransient<IService, ServiceA>();
services.AddTransient<IService, ServiceB>();</code>

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
<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>

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
<code class="language-csharp">services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
    switch (key)
    {
        case "A":
            return serviceProvider.GetService<ServiceA>();
        case "B":
            return serviceProvider.GetService<ServiceB>();
        default:
            throw new KeyNotFoundException();
    }
});</code>
, yang menyediakan kaedah suntikan tetapan:

maka kita boleh mengakses pilihan ini dalam pembina perkhidmatan:

IOptions Kesimpulan

<code class="language-csharp">services.Configure<ServiceAOptions>(options =>
{
    options.ConnectionString = "connectionStringA";
});</code>

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.
<code class="language-csharp">public ServiceA(IOptions<ServiceAOptions> options)
{
    _connectionString = options.Value.ConnectionString;
}</code>

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:
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