Senin, 30 Maret 2015

Dependency Injection Dengan Autofac

Halo pembaca, apa kabar? setelah blog ini menganggur 'agak' lama, sekarang saya sempatkan lagi untuk mengisinya lagi dengan tulisan yang mudah-mudahan bermanfaat.

Kali ini saya akan membahas sebuah design pattern, design pattern?? apaan tuh..
Design pattern adalah sebuah arsitektur dari pembuatan perangkat lunak yang dipakai diseluruh dunia. Tujuan dari digunakannya design pattern adalah untuk mempermudah pembuatan software.
untuk lebih jelasnya bisa dibaca pada link berikut http://www.dofactory.com/net/design-patterns

Design pattern yang akan kita bahas kali ini adalah Dependency Injection. Dependency Injection adalah prinsip software design yang memberikan kita pedoman untuk membuat loosely coupled class, merapikan code dan membuat code kita mudah dipahami. untuk lebih lanjut kita akan membuat sebuah aplikasi web asp mvc.


kita buat class baru. kita beri nama Student (biar gampang ajasih). kita tulis seperti dibawah ini.



Kita buah HomeController.cs menjadi seperti code dibawah.



Ubah file Index.cshtml pada Home menjadi seperti dibawah ini


Lalu kita build dan jalankan, maka hasilnya akan seperti ini



Semua berjalan lancar seperti yang diharapkan, tetapi  ini hanya sebuah aplikasi sederhana. dalam dunia nyata hal tersebut jarang terjadi. Apabila kita ingin mengambil data student pada method lain, maka kita akan melakukan hal yang sama berulang-ulang kali dan hal ini tidak sesuai dengasn prinsip OOP yaitu DRY (Don't repeat yourself).

Untuk itulah diperlukan Dependecy Injection dimana kita akan membuat sebuah class baru untuk populate data. kita buat class PopulateData.cs

kemudian kita ubah HomeController menjadi seperti dibawah.

sekarang untuk populate data kita tidak perlu lagi membuat code yang sama pada tiap method, kita hanya tinggal memanggil method GetStudent pada class PopulateData.

Seperti itulah prinsip Dependency Injection yaitu suatu modul saling bergantung dengan modul lainya.


Contoh lebih kompleks


Selanjutnya kita akan memakai design pattern "Repository". Design pattern ini bertujuan untuk memisahkan logic dengan repository (data). add new folder beri nama repository


add new Interface beri nama IStudentRepository dan sebuah class StudentRepository


IStudentRepository merupakan sebuah abstract class berisi method-method yang akan digunakan, sedangkan StudentRepository berisi implmentasi dari method pada abstract class


Buat sebuah controller baru beri nama StudentController. buat seperti dibawah


Kemudian add new View untuk index pada student buat seperti code pada Index.cshtml home, build dan jalankan aplikasi dengan url localhost:[port]/Student/Index, hasilnya akan sama seperti contoh sebelumnya


Cara sebelumnya cukup berguna,tetapi akan sangat merepotkan apabila method tersebut digunakan dibanyak tempat, maka kita harus menginisialisasi terlebih dahulu. Solusinya adalah dengan menggunakan Constructor-Injection yaitu menambahkan default constructor. Ubah StudentController menjadi seperti dibawah

build dan coba jalankan. maka hasilnya akan seperti dibawah


Error ini terjadi karena kita belum menginisialisasi IStudentRepositoy. Untuk mengatasi hal ini diperlukan Inversion of Control (IoC) agar IStudentRepository dapat terinisialisasi secara otomatis dan StudentController dapat depend hanya kepada Abstract class yaitu IStudentRepository tanpa perlu tahu kelas konrit yaitu StudentController.

IoC yang kita gunakan adala AutoFac. Saya pilih AutoFac karena AutoFac relatif lebih cepat dibandingkan IoC lainnya http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison. http://stackoverflow.com/questions/4581791/how-do-the-major-c-sharp-di-ioc-frameworks-compare

Untuk menambahkan AutoFac pada solution kita add melalui Nuget. pilih autofac dan autofac asp.net mvc5 integration


Setelah kita add. kita ubah file Global.asax menjadi seperti dibawah

 builder.RegisterControllers(typeof(MvcApplication).Assembly);
method ini berfungsi mendaftarkan semua controller agar tidak perlu membuat default parameterless constructor
builder.RegisterType().As().SingleInstance();
method ini berfungsi menginisialisasi StudentRepository sebagai implementasi dari IStudentRepository. Coba build dan jalankan

Voila aplikasi berjalan lancar.

 Sumber :
http://www.codeproject.com/Articles/808894/IoC-in-ASP-NET-MVC-using-Autofac
http://blogs.infosupport.com/mvc4autofacentityframework/

1 komentar :

Unknown mengatakan...

mantap kang ridwan.. udah mau berbagi ilmu coding program php and html nya.. sip dah pokokny..

tinggal nanti saya coba praktekin.. yang kang ..

oh ya jangan lupa mampir kesini kang ridwan situs resmi saya : agen bola Citibet88