Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mendaftar dan menyelesaikan pelbagai pelaksanaan antara muka dengan kekunci unik dalam suntikan ketergantungan teras ASP.NET?

Bagaimanakah saya boleh mendaftar dan menyelesaikan pelbagai pelaksanaan antara muka dengan kekunci unik dalam suntikan ketergantungan teras ASP.NET?

Susan Sarandon
Susan Sarandonasal
2025-01-29 21:31:09436semak imbas

How Can I Register and Resolve Multiple Interface Implementations with Unique Keys in ASP.NET Core Dependency Injection?

Daftar dan menganalisis pelbagai antara muka dalam teras ASP.NET untuk melaksanakan

pernyataan soalan

Apabila menggunakan perkhidmatan antara muka yang sama, mereka mungkin menjadi cabaran berdasarkan pendaftaran dan analisis utama yang unik. Tidak seperti bekas IOC yang lain yang dibenarkan untuk membezakan pelaksanaan tertentu, sistem DI Lalai ASP.NET teras nampaknya terhad dalam hal ini.

Penyelesaian: Gunakan func untuk komisen

Untuk mengatasi had ini, ia boleh dicapai dengan menggunakan Suruhanjaya Perkongsian Jenis sebagai skim pembolehubah.

ServiceResolver dalam fail , gunakan perkhidmatan sementara dan pemetaan jenis yang berdaftar:

<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>

di mana -mana kelas yang disuntik oleh DI, anda boleh menggunakan Startup.cs untuk mendapatkan perkhidmatan yang diperlukan: ServiceResolver

<code class="language-csharp">services.AddTransient<ServiceA>();
services.AddTransient<ServiceB>();
services.AddTransient<ServiceC>();

services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
    switch (key)
    {
        case "A":
            return serviceProvider.GetService<ServiceA>();
        case "B":
            return serviceProvider.GetService<ServiceB>();
        case "C":
            return serviceProvider.GetService<ServiceC>();
        default:
            throw new KeyNotFoundException();
    }
});</code>
<:> NOTA:

Kaedah ini menggunakan kekunci rentetan untuk memudahkan tujuan, tetapi jika perlu, anda boleh menggunakan mana -mana jenis parsing tersuai sebagai kunci. ServiceResolver

Langkah berjaga -jaga lain
<code class="language-csharp">public class Consumer
{
    private readonly IService _aService;

    public Consumer(ServiceResolver serviceAccessor)
    {
        _aService = serviceAccessor("A");
    }

    public void UseServiceA()
    {
        _aService.DoTheThing();
    }
}</code>

Walaupun penyelesaian ini menyelesaikan masalah pertaruhan utama dan menganalisis pelbagai pelaksanaan antara muka, perlu memberi perhatian kepada perkara -perkara berikut:

Penyelesaian ini melibatkan pemetaan manual. Ia tidak menyelesaikan masalah menyuntik data statik ke dalam pembina semasa tempoh pendaftaran. Atas sebab ini, pertimbangkan untuk menggunakan mod pilihan atau teknologi lain.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mendaftar dan menyelesaikan pelbagai pelaksanaan antara muka dengan kekunci unik dalam suntikan ketergantungan 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