Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah suntikan kebergantungan Unity boleh mengendalikan pengesahan bersyarat berdasarkan pemilihan pembekal?

Bagaimanakah suntikan kebergantungan Unity boleh mengendalikan pengesahan bersyarat berdasarkan pemilihan pembekal?

Linda Hamilton
Lepaskan: 2024-12-29 13:40:11
asal
611 orang telah melayarinya

How can Unity's dependency injection handle conditional authentication based on provider selection?

Penyelesaian Ketergantungan Bersyarat dalam Perpaduan

Dalam artikel ini, kita akan menyelidiki konsep penyelesaian pergantungan bersyarat dalam Perpaduan, menangani pelaksanaan pengesahan bersyarat berdasarkan sampel kod disediakan.

Bersyarat Menyelesaikan

Menyelesaikan bersyarat membolehkan anda membina objek berdasarkan keadaan tertentu. Dalam kes kami, kami mahu Unity memilih penyedia pengesahan yang sesuai (Twitter atau Facebook) berdasarkan kaedah pengesahan pengguna.

Antaramuka

Untuk mencapai ini, kami menentukan antara muka IAuthenticate dengan kaedah AppliesTo yang menjejaki kaedah pengesahan yang disokong oleh pembekal.

public interface IAuthenticate{
    bool Login(string user, string pass);
    bool AppliesTo(string providerName);
}
Salin selepas log masuk

Sahkan Penyedia

Untuk setiap pembekal pengesahan (Twitter dan Facebook), kami melaksanakan antara muka IAuthenticate dan mengatasi kaedah AppliesTo untuk menentukan sama ada ia mengendalikan pengesahan yang ditentukan kaedah.

public class TwitterAuth : IAuthenticate {
    ...
    bool AppliesTo(string providerName) {
        // Check if this class name matches the provider name
    }
}
Salin selepas log masuk

Strategi

Kami mencipta antara muka IAuthenticateStrategy yang berfungsi sebagai titik pusat untuk melaksanakan pengesahan. Strategi ini termasuk kaedah untuk memilih penyedia yang sesuai berdasarkan Nama pembekal.

public interface IAuthenticateStrategy{
    bool Login(string providerName, string user, string pass);
}
Salin selepas log masuk

Pendaftaran Unity

Dalam konfigurasi Unity kami, kami mendaftarkan penyedia pengesahan dan strategi instance.

unityContainer.RegisterType<IAuthenticate, TwitterAuth>("twitterAuth");
unityContainer.RegisterType<IAuthenticate, FacebookAuth>("facebookAuth");
unityContainer.RegisterType<IAuthenticateStrategy, AuthenticateStrategy>(
    // Resolve authentication providers array
    new InjectionConstructor(new ResolvedArrayParameter<IAuthenticate>(
        new ResolvedParameter<IAuthenticate>("twitterAuth"),
        new ResolvedParameter<IAuthenticate>("facebookAuth")
    ))
);
Salin selepas log masuk

Penggunaan

Pengawal sahih kini diubah suai untuk menggunakan antara muka strategi.

private readonly IAuthenticateStrategy _authenticateStrategy;

public AuthenticateController(IAuthenticateStrategy authenticateStrategy) {...}

public virtual ActionResult Twitter(string user, string pass) {...}

public virtual ActionResult Facebook(string user, string pass) {...}
Salin selepas log masuk

Sekarang, apabila Log Masuk tindakan digunakan dengan nama pembekal tertentu, strategi akan memilih penyedia pengesahan yang betul dan melakukan log masuk sewajarnya.

Reka Bentuk Yang Diperbaiki

Corak strategi membahagikan pengendalian pengesahan daripada logik pengawal. Ini membolehkan penyelenggaraan dan pemanjangan yang lebih mudah dengan hanya menambah penyedia pengesahan baharu tanpa mengubah suai kod pengawal.

Atas ialah kandungan terperinci Bagaimanakah suntikan kebergantungan Unity boleh mengendalikan pengesahan bersyarat berdasarkan pemilihan pembekal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan