Bagaimana menerapkan DI di WebAPI menggunakan NInject

Injeksi ketergantungan adalah pola desain perangkat lunak yang membantu Anda membuat implementasi yang dapat dicolokkan dalam aplikasi Anda menggunakan komponen yang dapat diuji dan digabungkan secara longgar. Ini menghilangkan ketergantungan hard-coded antara tipe dan membuat tipe Anda lebih mudah untuk dibangun, diuji, dan dipelihara dari waktu ke waktu. Pola desain IOC (Inversion of Control) menyatakan bahwa objek tidak boleh membuat objek yang bergantung padanya untuk melakukan beberapa aktivitas.

Anda memiliki banyak kontainer IOC yang membantu Anda dalam pembuatan instance otomatis dan manajemen siklus hidup objek. Perhatikan bahwa injeksi Ketergantungan adalah bagian dari prinsip IOC. Kontainer IOC memanfaatkan injeksi ketergantungan untuk membalikkan aliran kontrol.

Mulai

Untuk memulai dengan implementasi ini buat proyek WebAPI baru di Visual Studio. Selanjutnya, instal paket yang diperlukan dari NuGet untuk bekerja dengan NInject. Anda dapat menginstal paket Ninject.Web.WebApi.WebHost melalui NuGet Package Manager. Ini pada gilirannya akan menginstal dua paket berikut untuk Anda.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Injeksi ketergantungan menggunakan NInject

Setelah paket Ninject.Web.WebApi.WebHost berhasil diinstal, file NInject.WebCommon.cs secara otomatis dibuat di dalam folder App_Start di proyek Anda. Akan ada banyak kode boilerplate yang dihasilkan - abaikan saja dan lihat metode RegisterServices (). Sekilas, seperti inilah tampilan metode ini.

private static void RegisterServices(IKernel kernel)

{

}

Anda perlu menulis kode Anda di metode RegisterServices untuk mendaftarkan layanan atau memasukkan dependensi. Kami akan kembali ke ini nanti di artikel ini.

Dalam contoh ini, kita akan menggunakan injeksi konstruktor - jenis injeksi ketergantungan di mana satu atau lebih ketergantungan disuntikkan melalui konstruktor. Dua jenis injeksi ketergantungan lainnya meliputi: injeksi penyetel dan injeksi antarmuka. Saya membahas ini secara rinci di salah satu posting saya sebelumnya.

Sebagai langkah berikutnya, buat pengontrol baru bernama AuthorsController ke proyek WebAPI yang telah Anda buat. Ganti kode default AuthorsController dengan yang diberikan di bawah ini.

public class AuthorsController : ApiController

    {

        private readonly IAuthorRepository repository;

        public AuthorsController(IAuthorRepository repository)

        {

            this.repository = repository;

        }

        public List Get()

        {

            return repository.GetAllAuthors();

        }

    }

AuthorsController berisi referensi hanya baca ke antarmuka IAuthorRepository, konstruktor argumen, dan metode Get action. Perhatikan bahwa AuthorsController menggunakan konstruktor untuk memasukkan dependensi, yaitu, konstruktor argumen yang menerima referensi ke antarmuka IAuthorRepository sebagai parameter. Antarmuka IAuthorRepository diimplementasikan oleh kelas AuthorRepository. Begini tampilan antarmuka IAuthorRepository.

public interface IAuthorRepository

    {

        List GetAllAuthors();

    }

Metode GetAllAuthors () digunakan untuk mengembalikan daftar penulis. Nama penulis memiliki kode keras. Kelas AuthorRepository mengimplementasikan metode GetAllAuthors seperti yang ditunjukkan di bawah ini.

public class AuthorRepository : IAuthorRepository

    {

        public List GetAllAuthors()

        {

            List authors = new List();

            authors.Add("Joydip");

            authors.Add("Pete");

            authors.Add("Steve");

            return authors;

        }

    }

Mendaftarkan layanan kami dengan Ninject

Langkah ini cukup sederhana. Ingat kita telah membahas metode RegisterServices sebelumnya? Ini milik kelas statis NinjectWebCommon dalam file NinjectWebCommon.cs. Inilah cara Anda dapat menggunakan metode RegisterServices untuk menyelesaikan dependensi.

private static void RegisterServices(IKernel kernel)

{

   kernel.Bind().To();   

Dan hanya itu yang perlu Anda lakukan. Jika Anda melihat error runtime yang terkait dengan NInject, itu mungkin karena ActivationException. Untuk memperbaikinya, Anda harus menginstal versi terbaru dari paket Ninject.Web.WebApi. Cukup tingkatkan kembali Ninject.Web.WebApi, kompilasi ulang, lalu jalankan aplikasi Anda lagi.

Anda dapat melihat posting ini untuk informasi tambahan tentang bagaimana kita dapat menggunakan NInject dengan WebAPI.