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
Linda Hamiltonasal
2024-12-29 13:40:11602semak imbas

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);
}

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

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);
}

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")
    ))
);

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) {...}

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!

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