Cara menggunakan Autofac di ASP.Net Core

Injeksi ketergantungan memfasilitasi kopling yang longgar dan meningkatkan kemampuan pengujian dan perawatan. ASP.Net Core menyediakan dukungan bawaan untuk injeksi ketergantungan (semacam pembalikan kontrol) dengan wadah injeksi ketergantungan minimalis. Namun, penampung bawaan tidak memiliki banyak fitur dari injeksi ketergantungan penuh atau pembalikan wadah kontrol.

Untuk mengatasinya, Anda dapat menggunakan container pihak ketiga di ASP.Net Core. Dengan kata lain, Anda dapat dengan mudah mengganti penampung bawaan dengan penampung pihak ketiga. Autofac adalah inversi wadah kontrol yang dapat digunakan untuk menyelesaikan dependensi. Artikel ini memberikan diskusi tentang bagaimana kita dapat bekerja dengan Autofac di ASP.Net Core.

Buat proyek ASP.Net Core di Visual Studio

Pertama mari kita buat proyek Inti ASP.Net di Visual Studio. Dengan asumsi Visual Studio 2017 atau Visual Studio 2019 diinstal di sistem Anda, ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat proyek ASP.Net Core baru di Visual Studio.

  1. Luncurkan Visual Studio IDE.
  2. Klik "Buat proyek baru".
  3. Di jendela "Buat proyek baru", pilih "Aplikasi Web Inti ASP.Net" dari daftar template yang ditampilkan.
  4. Klik Next.
  5. Di jendela "Configure your new project", tentukan nama dan lokasi untuk proyek baru tersebut.
  6. Klik Buat.
  7. Di jendela "Buat Aplikasi Web ASP.Net Core Baru", pilih .Net Core sebagai runtime dan ASP.Net Core 2.2 (atau yang lebih baru) dari daftar drop-down di bagian atas.
  8. Pilih "Aplikasi Web" sebagai template proyek. 
  9. Pastikan kotak centang "Aktifkan Dukungan Docker" dan "Konfigurasi untuk HTTPS" tidak dicentang karena kami tidak akan menggunakan fitur tersebut di sini.
  10. Pastikan Autentikasi disetel sebagai "Tanpa Autentikasi" karena kami juga tidak akan menggunakan autentikasi.
  11. Klik Buat.

Ini akan membuat proyek Inti ASP.Net baru di Visual Studio. Kami akan menggunakan proyek ini di bagian selanjutnya dari artikel ini untuk bekerja dengan Autofac.

Instal Autofac di proyek ASP.Net Core Anda

Mudah untuk menginstal Autofac - Anda dapat menginstalnya dari NuGet. Pada saat penulisan ini, versi Autofac saat ini adalah 4.9.2. Untuk bekerja dengan Autofac, Anda harus menginstal paket Autofac.Extensions.DependencyInjection juga. Ini akan memastikan bahwa Anda telah menginstal dependensi yang diperlukan untuk bekerja dengan Autofac.

Pilih proyek Aplikasi Web Inti ASP.Net yang Anda buat di atas, lalu klik kanan dan instal Autofac.Extensions.DependencyInjection melalui NuGet Package Manager. Terima perjanjian lisensi apa pun yang mungkin diminta selama penginstalan. Alternatifnya, Anda dapat menginstal paket ini dengan memasukkan perintah berikut di Konsol Pengelola Paket NuGet:

Install-Package Autofac.Extensions.DependencyInjection

Buat kelas di aplikasi ASP.Net Core Anda

Untuk mengilustrasikan injeksi ketergantungan, kita memerlukan beberapa objek untuk dikerjakan. Pertimbangkan antarmuka IAuthorRepository yang berisi deklarasi metode GetMessage di bawah ini.

 antarmuka publik IAuthorRepository

    {

        string GetMessage ();

    }

Kelas AuthorRepository mengimplementasikan antarmuka IAuthorRepository seperti yang ditunjukkan di bawah ini.

 kelas publik AuthorRepository: IAuthorRepository

    {

        string publik GetMessage ()

        {

            kembali "Hello World";

        }

    }

Perhatikan bahwa ini adalah implementasi minimalis dari repositori - yaitu, tidak berisi metode CRUD yang berisi repositori biasa. Saya akan menyerahkan kepada Anda untuk menerapkan metode CRUD dengan tepat.

Konfigurasi Autofac di ASP.Net Core

Untuk mengkonfigurasi Autofac, Anda harus menentukan kode konfigurasi di metode ConfigureServices di kelas Startup. Perhatikan bahwa metode ConfigureServices digunakan untuk menambahkan layanan saat runtime ke penampung.

Langkah pertama adalah membuat pembuat kontainer untuk mendaftarkan layanan yang diperlukan dengan kontainer Autofac. Langkah pertama adalah mengisi layanan kerangka kerja menggunakan metode Populate seperti yang ditunjukkan di bawah ini.

var containerBuilder = new ContainerBuilder ();

containerBuilder.Populate (layanan);

Langkah selanjutnya adalah mendaftarkan layanan kustom dengan Autofac. Untuk melakukannya, gunakan metode RegisterType pada instance pembuat kontainer seperti yang ditunjukkan di bawah ini.

containerBuilder.RegisterType (). As ();

Untuk membuat container, tulis kode berikut.

var container = containerBuilder.Build ();

return container.Resolve ();

Berikut ini kode sumber lengkap metode ConfigureServices untuk referensi Anda:

public IServiceProvider ConfigureServices (layanan IServiceCollection)

   {

       services.AddMvc ();

       var containerBuilder = new ContainerBuilder ();

       containerBuilder.Populate (layanan);

       containerBuilder.RegisterType ().

       Sebagai();

       var container = containerBuilder.Build ();

       return container.Resolve ();

   }

Gunakan Autofac di pengontrol Anda di ASP.Net Core

Sekarang Autofac telah diinstal dan dikonfigurasi di proyek Anda, Anda dapat mulai menggunakannya di pengontrol Anda. Cuplikan kode berikut mengilustrasikan bagaimana Anda bisa menyelesaikan dependensi di ValuesController.

  kelas publik ValuesController: ControllerBase

  {

        IAuthorRepository _authorRepository pribadi; 

        public ValuesController (IAuthorRepository authorRepository) 

        {

            _authorRepository = authorRepository;

        } // DAPATKAN api / values

        [HttpGet]

        publik ActionResult Get ()

        {

            return _authorRepository.GetMessage ();

        }

     // Metode tindakan lainnya

  }

Prinsip injeksi ketergantungan adalah realisasi dari inversi prinsip kontrol. Ini adalah teknik yang digunakan untuk menghapus dependensi dari implementasi dengan memungkinkan Anda memasukkan dependensi ini secara eksternal. Pembalikan wadah kontrol seperti Autofac memanfaatkan injeksi ketergantungan untuk membalikkan aliran kontrol dan membantu mengotomatiskan pembuatan instance dan manajemen siklus hidup objek.

Injeksi ketergantungan mengambil tiga bentuk: injeksi konstruktor, injeksi antarmuka, dan injeksi properti. Dalam contoh ini, kami menggunakan injeksi konstruktor untuk memasukkan dependensi - yaitu turunan dari tipe AuthorRepository - saat runtime di kelas ValuesController.

Kami telah melihat bagaimana Autofac dapat digunakan untuk menggantikan wadah injeksi ketergantungan default di ASP.Net Core, tetapi kami hanya menggores permukaan dari kemampuannya. Saya akan menjelajahi Autofac lebih mendalam di posting mendatang di sini.