C#, OOP - Object Oriented Programming

C# – IoC Containers ve Castle Windsor IoC Container Kullanımı

5/5 - (1 vote)

Dependency Injection yazımda (loosy coupled) gevşek bağlı sınıfların nasıl dinamik şekilde üretileceğinden çok kısaca bahsetmiştim. Aynı örneğimizi bu sefer dinamik IOC Container ile yapacağız. Üst sınıflara bağlı olan alt sınıfları elle manuel üretmek yerine otomatik olarak ürettirip, IOC Container nesnesinden isteyeceğiz. Bu işlemi XML konfigurasyon ve Kod ile olmak üzere 2 farklı yöntemini de ele alacağız. Bu örneğimizde bir seyahat organizasyonu yapan bir firma var. Bu firma artık araba + bonus şoför kiralamanın pek tercih edilmediğinden dolayı bu seçeneği artık terketmek istiyor. Sadece otobüs + bonus şoför kiralayarak hizmetine devam etmek istiyor. Gelin birlikte örnekleyelim.

Bu tanımlamalardan sonra Projemize Nuget yardımı ile Castle.Windsor u kuruyoruz. Kurulumdan sonra aşağıdaki IOC Container sınıfını yazıyoruz.

Yukarıdaki kodlarımızda BootstrapContainer methodu dışındakileri sabit şekilde kopyalabilirsiniz kendi projenizde. BootstrapContainer methodunun içini bakarsak xml konfigurasyon tanımlaması ve hemen altında tanımladığımız sınıflar için bir atama işlemi göreceğiz. Kısaca açıklamak gerekirse , Component.For<IDriver>().ImplementedBy<BusDriver>() bu satır şunu demektedir:

Ben senden IDriver arayüzünü implemente eden hangi sınıfı istersem isteyeyim bana yalnızca BusDriver vereceksin demektir. Sonrasında Component.For<IVehicle>().ImplementedBy<BusPassenger>() ise satırda da ben senden IVehicle ile taşınacak yolcu arayüzünden bir sınıf istediğimde o sınıf otobüs ile taşınabilecek yolcu sınıfı olacak. Yani BusPassenger olacak , başka kesinlikle istemiyorum şuan ki ihtiyacım sadece bu. şayet olursa ben ileride onu ayarlarım şimdilik tamamen böyle olacak diyoruz.

Diğer yöntem olan XML için app.config dosyamızı aşağıdaki tanımlıyoruz.

Yukarıda component olarak tanımladığımız atamalara (map’leme)  göz attığımızda kod ile yaptığımızın aynısı aslında. Fark xml ve Sınıfların namespace isimleri ile birlikte yazılması başka bir fark yok.

Son olarak bu tasarımları çağıran program kodumuzu yazalım.

Farkettiyseniz eski örnekte organizatöre gidecek sınıfları biz oluştururken şimdi ise o ise IOC Container e yıktık. IOC nin işi bu zaten 🙂 Boşa nuget ten indirmedik .

Artık araba ile seyahat kiralamıyoruz !!

Evet işte bu kadar , ister XML config ile ister IOC Container bootstrapcontainer methodunda manuel olarak atama (mapleme ) yapalım, bizim için artık bir hizmeti açmak kapamak , iptal etmek devreye almak , tek satırdan ibaret hale gelmedi mi ? Geldiyse ne mutlu biz programcılara , yazılım kuralları trafik kuralları gibidir. Umarım faydalı olabilmişimdir

Selam ve dua ile.

 

Benzer Yazılar:



This post has been seen 1005 times.
Be the First to comment.

Leave a Comment

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir