Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mendaftar dan menyelesaikan pelbagai pelaksanaan antara muka dengan kekunci unik dalam suntikan ketergantungan teras ASP.NET?
Daftar dan menganalisis pelbagai antara muka dalam teras ASP.NET untuk melaksanakan
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
<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!