Cara melaksanakan DI dalam WebAPI menggunakan NInject

Suntikan ketergantungan adalah corak reka bentuk perisian yang membantu anda membina implementasi yang dapat dipasang dalam aplikasi anda dengan menggunakan komponen yang dapat digabungkan secara longgar. Ini menghilangkan kebergantungan keras antara jenis dan menjadikan jenis anda lebih mudah dibina, diuji, dan dikekalkan dari masa ke masa. Corak reka bentuk IOC (Inversion of Control) menyatakan bahawa objek tidak boleh membuat objek yang bergantung kepada mereka untuk melakukan beberapa aktiviti.

Anda mempunyai banyak bekas IOC yang membantu anda dalam penataan automatik dan pengurusan kitaran hidup objek. Perhatikan bahawa suntikan Ketergantungan adalah sebahagian daripada prinsip IOC. Bekas IOC memanfaatkan suntikan kebergantungan untuk mengalihkan aliran kawalan.

Bermula

Untuk memulakan pelaksanaan ini, buat projek WebAPI baru di Visual Studio. Seterusnya, pasang pakej yang diperlukan dari NuGet untuk bekerjasama dengan NInject. Anda boleh memasang pakej Ninject.Web.WebApi.WebHost melalui Pengurus Pakej NuGet. Ini seterusnya akan memasang dua pakej berikut untuk anda.

Ninject.Web.WebApi

Ninject.Web.WebApi.WebHost

Suntikan ketergantungan menggunakan NInject

Setelah pakej Ninject.Web.WebApi.WebHost berjaya dipasang, fail NInject.WebCommon.cs dibuat secara automatik di dalam folder App_Start dalam projek anda. Akan ada banyak kod boilerplate yang dihasilkan - abaikan sahaja dan rujuk kaedah RegisterServices (). Pada pandangan pertama, inilah kaedah seperti ini.

private static void RegisterServices(IKernel kernel)

{

}

Anda perlu menulis kod anda dalam kaedah RegisterServices untuk mendaftarkan perkhidmatan atau memasukkan kebergantungan. Kami akan membincangkannya kemudian dalam artikel ini.

Dalam contoh ini, kita akan menggunakan suntikan konstruktor - sejenis suntikan kebergantungan di mana satu atau lebih pergantungan disuntik melalui pembina. Dua jenis suntikan ketergantungan lain termasuk: suntikan setter dan suntikan antara muka. Saya membahasnya secara terperinci dalam salah satu catatan saya yang terdahulu.

Sebagai langkah seterusnya, buat pengawal baru bernama AuthorsController ke projek WebAPI yang telah anda buat. Gantikan kod lalai dari AuthorsController dengan kod yang diberikan di bawah.

public class AuthorsController : ApiController

    {

        private readonly IAuthorRepository repository;

        public AuthorsController(IAuthorRepository repository)

        {

            this.repository = repository;

        }

        public List Get()

        {

            return repository.GetAllAuthors();

        }

    }

AuthorsController mengandungi rujukan baca sahaja ke antara muka IAuthorRepository, pembina argumen dan kaedah Get action. Perhatikan bahawa AuthorsController menggunakan konstruktor untuk menyuntik kebergantungan, iaitu, itu adalah pembina argumen yang menerima rujukan ke antara muka IAuthorRepository sebagai parameter. Antaramuka IAuthorRepository dilaksanakan oleh kelas AuthorRepository. Begini rupa antaramuka IAuthorRepository.

public interface IAuthorRepository

    {

        List GetAllAuthors();

    }

Kaedah GetAllAuthors () digunakan untuk mengembalikan senarai pengarang. Nama pengarangnya dicantumkan. Kelas AuthorRepository menerapkan kaedah GetAllAuthors seperti yang ditunjukkan di bawah.

public class AuthorRepository : IAuthorRepository

    {

        public List GetAllAuthors()

        {

            List authors = new List();

            authors.Add("Joydip");

            authors.Add("Pete");

            authors.Add("Steve");

            return authors;

        }

    }

Mendaftarkan perkhidmatan kami dengan Ninject

Langkah ini agak mudah. Ingatkah kita membincangkan kaedah RegisterServices tadi? Ini tergolong dalam kelas statik NinjectWebCommon dalam fail NinjectWebCommon.cs. Inilah cara anda boleh menggunakan kaedah RegisterServices untuk menyelesaikan pergantungan.

private static void RegisterServices(IKernel kernel)

{

   kernel.Bind().To();   

Dan hanya itu yang perlu anda lakukan. Sekiranya anda melihat sebarang ralat runtime yang berkaitan dengan NInject, itu mungkin disebabkan oleh ActivationException. Untuk memperbaikinya, anda harus memasang pakej Ninject.Web.WebApi versi terbaru. Cukup naik taraf Ninject.Web.WebApi sekali lagi, kumpulkan semula dan kemudian jalankan aplikasi anda sekali lagi.

Anda boleh melihat siaran ini untuk mendapatkan maklumat tambahan mengenai bagaimana kami dapat menggunakan NInject dengan WebAPI.