Bu makale, Dependency Injection teknolojisi ve NET Framework ile kullanımı hakkında bilgi vermektedir Dependency Injection, yazılım geliştirme sırasında karşılaşılan zorlukların üstesinden gelmek için kullanılan bir tasarım desenidir Bu teknoloji, NET Framework'te Ninject, Autofac ve Unity gibi kütüphaneler kullanılarak uygulanabilir Ayrıca, bu teknoloji sayesinde, yazılımın test edilebilirliği ve bakımı kolaylaştırılarak daha kaliteli bir yazılım süreci sağlanabilir

Dependency Injection, yazılım geliştirme sürecinde karşılaşılan bazı zorlukların üstesinden gelmek için kullanılan bir tasarım desenidir. Bir sınıfın başka bir sınıfın nesnesine ihtiyaç duyduğu durumlarda, nesneyi sınıfa enjekte ederek kullanmayı sağlar. Bu teknik, sınıflar arasındaki bağımlılıkları ve sınıfların yeniden kullanılabilirliğini artırır.
.NET Framework, Dependency Injection için çeşitli kütüphaneler sunar. Bu kütüphanelerden en popüler olanları Ninject, Autofac ve Unity'dir. Bu makalede, .NET Framework kullanılarak Dependency Injection konusu ele alınacak.
Bu teknik ile programlama esnasındaki Karmaşıklık seviyesi azalmakta ve programcıların daha düzgün bir programlama yapmasına olanak tanımaktadır. Ayrıca, bakım ve eklemeler sırasında, karmaşıkluğun azaltılmış olması sayesinde yeni serviselerin projeye dahil edilmesi de daha kolay hale gelmektedir. Dependency Injection, Türkçe karşılığı "bağımlılık enjeksiyonu" olan bir tasarım desenidir.
.NET Framework kullanılarak Dependency Injection uygulamak için, Inversion of Control (IoC) prensibinin kullanılması gerekmektedir. Bu prensip, sınıfların bağımlılıklarını yaratan ve yöneten bir arayüzdür. Bu arayüz, belirli bir sınıfın sahip olduğu bağımlılıkları yönetmektedir. Bu sayede, sınıflar arasındaki bağımlılıklar, Dependency Injection kullanılarak rahatlıkla yönetilebilmektedir.
Dependency Injection gerçekleştirmek için .NET Framework'te Ninject, Autofac ve Unity gibi Dependency Injection kütüphaneleri kullanılabilir. Bu kütüphaneler, DI işlemini daha kolay hale getirir ve programcılara zaman ve çaba tasarrufu sağlar. Aynı zamanda, kodların daha düzenli olmasına ve daha az hata yapılmasına yardımcı olurlar. Dependency Injection kullanarak yazılım geliştirme süreci daha kolay hale getirilerek, projeleri daha rahat bir şekilde yönetilebilir hale getirilir.
Dependency Injection Nedir?
Dependency Injection (DI), yazılım geliştirme sürecinde karşılaşılan bazı zorlukların üstesinden gelmek için kullanılan bir tekniktir. Bir sınıfın başka bir sınıfın nesnesine ihtiyaç duyduğu durumlarda, DI tasarım deseni ile nesne sınıfa enjekte edilir. Böylece, sınıfa ait bir nesne başka bir sınıfın içerisinde kullanılabilir hale gelir. Bu sayede, yazılımın yeniden kullanılabilirliği ve bakımı kolaylaşır.
DI prensibi, Inversion of Control (IoC) olarak da bilinir. Bu prensip, nesnelerin oluşturulmasında kontrolün, sınıfın dışındaki bir komponente devredilmesini ifade eder. Böylece, sınıfın bağımlılıklarının azaltılması sağlanır. DI prensibinin uygulanması, yazılımın test edilebilirliğini ve bakımını kolaylaştırarak, daha kaliteli bir yazılım geliştirme süreci sağlar.
.NET Framework'te Dependency Injection Nasıl Yapılır?
.NET Framework ile yazılım geliştirirken, Dependency Injection için çeşitli kütüphaneler kullanılabilmektedir. Bu kütüphaneler, sınıf ve nesneler arasındaki bağımlılıkları azaltarak uygulamanın geliştirme sürecinde zaman ve işçilik tasarrufu sağlar. Dependency Injection, kod tekrarını en aza indirir ve daha kolay test edilebilir kod yazmayı sağlar. Ne var ki, en popüler Dependency Injection kütüphaneleri Ninject, Autofac ve Unity'dir.
Bu kütüphaneler geliştiricilere sınıflara nesneleri enjekte etme imkanı verir. Kısacası, Dependency Injection bir sınıfın ihtiyaç duyduğu nesnelere, sınıfın bir dış etkileşim kurulmadan erişmesini sağlar. Yukarıda bahsi geçen kütüphaneler, Dependency Injection uygulamalarını sağlamlaştırmak için kullanılan 3 popüler seçenek arasındadır. Tek bir kütüphane kullanmak zorunda olmadığınızda, projenizin ihtiyaçlarını karşılayacak olan kütüphaneyi seçebilirsiniz. Bu kütüphanelerden hangisini seçerseniz seçin, Dependency Injection'nın uygulanması, daha verimli ve daha işlevsel yazılımın geliştirilmesine yardımcı olacaktır.
Ninject Kullanarak Dependency Injection
Ninject, .NET için açık kaynaklı bir Dependency Injection kütüphanesidir. Geliştiriciler, bu kütüphane sayesinde nesneleri sınıflara enjekte edebilirler. Ninject, özellikle büyük ve karmaşık projelerde kullanılmak üzere tasarlanmıştır. Bu kütüphane, kurulumu ve kullanımı kolaydır ve çeşitli kurulum işlemleri için hazır modüller sağlar.
Sınıfın kurulumu, Ninject tarafından sağlanan bir modül (Module) sınıfı kullanılarak gerçekleştirilir. Modül sınıfı, DI işlemini gerçekleştirmek için gerekli olan bağımlılıkları tanımlar. Geliştiriciler, bu modül sınıfını özelleştirebilir ve ihtiyaçlarına göre ayarlayabilirler.
Dependency Injection uygulamak için, Inversion of Control (IoC) prensibinin kullanılması gerekir. Ninject, bu prensibi otomatik olarak kullanır ve geliştiricilerin DI fonksiyonunu çağırmalarını gerektirmez. Geliştiriciler, sadece sınıfın kurulumunu belirtmek için modül sınıfını kullanarak, nesnelerin sınıflara enjekte edilmesini sağlayabilirler. Bu sayede, kod tekrarları ve bağımlılıkların yönetimi kolaylaşır.
Ninject ile Sınıfın Kurulumu
.NET Framework ile Dependency Injection kullanımını sağlamak için öncelikle, kullanılacak olan Dependency Injection kütüphanesi yüklenir. Ninject, .NET için açık kaynaklı bir Dependency Injection kütüphanesidir ve oldukça popülerdir.
Dependency Injection kullanmak için, bir sınıfın başka bir sınıfın nesnesine ihtiyaç duyduğu durumlarda, nesneyi sınıfa enjekte etmek gereklidir. Sınıfın kurulumu Ninject tarafından sağlanan bir modül (Module) sınıfı kullanılarak gerçekleştirilir.
Modül Sınıfı | Açıklama |
---|---|
Bind | Sınıfın kurulumunu tanımlar. |
To | Sınıfın hangi somut nesnesine bağımlı olduğunu belirler. |
InSingletonScope | Sınıfın örneğinin sadece bir kez oluşturulacağını belirtir. |
Yukarıdaki örnek kodda, UserService sınıfı için kurulum gerçekleştirildi. Bind ifadesi ile sınıfın kurulumu tanımlandı ve To kısmı ile somut nesne belirtildi. InSingletonScope ifadesi ise, örneğin sadece bir kez oluşturulacağını belirtir.
Bu şekilde sınıfların kurulumu gerçekleştirildikten sonra ise, DI uygulaması için gerekli olan Inversion of Control prensibi ile birlikte Dependency Injection işlemi gerçekleştirilir.
Ninject ile Dependency Injection Uygulama
Ninject ile Dependency Injection uygulaması oldukça kolaydır. Bu işlem için öncelikle sınıfın kurulumu gereklidir. Sınıfın kurulumu, Ninject tarafından sağlanan bir modül sınıfı kullanılarak gerçekleştirilir. Daha sonra, Inversion of Control (IoC) prensibi kullanılarak Dependency Injection uygulanır.
IoC prensibi, bir sınıfın, başka bir sınıfın nesnesine ihtiyaç duyduğu durumlarda, nesneyi sınıfa enjekte etmesi gerektiğini belirtir. Ninject, bu prensibi otomatik olarak kullanarak, sınıflar arasında bağımlılığı en aza indirir. Bu sayede, geliştiricilerin DI fonksiyonunu çağırmalarına gerek kalmaz.
Ninject ile Dependency Injection uygulaması için örnek bir kod yapısı aşağıdaki gibi olabilir:
public interface IProductRepository{ void AddProduct(Product product);}public class ProductRepository : IProductRepository{ public void AddProduct(Product product) { //Product ekleme işlemi burada gerçekleştirilir. }}public class ProductService{ private readonly IProductRepository _productRepository; public ProductService(IProductRepository productRepository) { _productRepository = productRepository; } public void AddProduct(Product product) { _productRepository.AddProduct(product); }}public class Bindings : Ninject.Modules.NinjectModule{ public override void Load() { Bind().To (); Bind ().ToSelf(); }}
Bu kod yapısında, IProductRepository arayüzü, ProductRepository sınıfına enjekte edilir. ProductService sınıfı ise, IProductRepository arayüzünü kullanarak işlemlerini gerçekleştirir. Bindings sınıfı ise, Ninject tarafından sağlanan bir modül sınıfıdır ve kurulum işlemlerini içerir. Bu sınıf, Ninject tarafından otomatik olarak çağrılarak, bağımlılıklarınızın enjekte edilmesini sağlar.
Autofac Kullanarak Dependency Injection
Dependency Injection, yazılım geliştirme sürecinde karşılaşılan zorlukların üstesinden gelmek için kullanılan bir tekniktir. Bu teknik, bir sınıfın başka bir sınıfın nesnesine ihtiyaç duyduğu durumlarda, nesneyi sınıfa enjekte ederek kullanmayı sağlayan bir tasarım desenidir. .NET Framework, Dependency Injection için birçok kütüphane sunar. Bu kütüphanelerden biri olan Autofac, .NET için açık kaynaklı bir Dependency Injection kütüphanesidir.
Geliştiriciler, Autofac kütüphanesi kullanarak, nesneleri sınıflara enjekte edebilirler. Sınıfın kurulumu, Autofac tarafından sağlanan bir ContainerBuilder sınıfı kullanılarak gerçekleştirilir. Dependency Injection uygulamak için, Inversion of Control (IoC) prensibi kullanılır. Autofac bu prensibi otomatik olarak kullanır ve geliştiricilerin DI fonksiyonunu çağırmalarını gerektirmez. Autofac kütüphanesi, .NET Framework için oldukça popülerdir ve geliştiriciler arasında yaygın olarak kullanılır.
Autofac ile Sınıfın Kurulumu
AutoFac kütüphanesi kullanılarak sınıfların kurulumları gerçekleştirilirken, kurulum işlemi için ContainerBuilder sınıfı kullanılır. Bu sınıf, kurulum işlemi sırasında kullanılacak nesneleri oluşturarak, gerekli ayarlamaları yapar ve sınıfın ihtiyaç duyduğu diğer nesneleri enjekte eder.
Kurulum işlemi yapılırken, ContainerBuilder sınıfı içerisinde Register methodu kullanılır. Bu method, kurulum işlemi için kullanılacak nesneleri tanımlar. Tanımlanan bu nesneler, diğer sınıflarda kullanılmak üzere kaydedilir. Ardından, Build methodu çağırılarak tüm kurulum işlemi gerçekleştirilir.
AutoFac ile sınıfın kurulumu esnasında, çeşitli ayarlamalar yapılabilir. Örneğin, sınıfın ihtiyacı olan nesneleri belirleyebilir, kurulum işlemi sırasında nesnelerin ömürlerini kontrol edebilirsiniz. Bu ayarlamalar, ContainerBuilder sınıfının çeşitli methodları aracılığıyla yapılabilir. Ayrıca, ayarlamalar öncesi yapılabilecek doğrulama işlemleri de bulunmaktadır.
AutoFac ile sınıfların kurulumu oldukça kolay ve hızlı bir şekilde gerçekleştirilebilir. ContainerBuilder sınıfı sayesinde tüm ayarlamalar yapıldıktan sonra, sadece Build methodu çağırılarak kurulum işlemi tamamlanır. Bu sayede, geliştiriciler zamanlarını kod yazmaya ayırabilir ve uygulama geliştirme sürecini hızlandırabilir.
Autofac ile Dependency Injection Uygulama
Autofac, .NET için açık kaynaklı bir Dependency Injection kütüphanesidir ve geliştiricilerin nesneleri sınıflara enjekte etmelerini sağlar. Dependency Injection uygulamak için, Inversion of Control (IoC) prensibinin kullanılması gerektiğinden bahsetmiştik. Autofac, bu prensibi otomatik olarak kullanır, bu nedenle geliştiricilerin DI fonksiyonunu çağırmalarını gerektirmez.
Sınıfın kurulumu, Autofac tarafından sağlanan bir ContainerBuilder sınıfı kullanılarak gerçekleştirilir. Bunun için, ContainerBuilder'a sınıfın kurulumunu ekleyerek başlamak gerekir. Ardından, Autofac IoC Container'a yapılacak çağrılar ile sınıflarda kullanılacak olan nesne ilişkileri oluşturulur.
Autofac IoC Container, uygulamanın ömrü boyunca bu ilişkileri korur ve nesnelerin doğru şekilde enjekte edilmesini sağlar. Autofac'te, diğer Dependency Injection kütüphanelerinde olduğu gibi, nesneleri enjekte etmek için ayar dosyaları kullanılmaz, bunun yerine IOC Container'a yapılan çağrılar kullanılır.
Autofac ile bir sınıfta Dependency Injection uygularken, sınıfın büyük bir bölümünün kendi kendine oluştuğu düşünülür. Sınıfta oluşturulan istemci undependent Instance'ları(resolve edilen sınıflar), Autofac tarafından belirlenir. Autofac ile Dependency Injection uygulanması, diğer DI kütüphanelerinde olduğu gibi oldukça basit ve kodu okunması kolay bir süreçtir.
Unity Kullanarak Dependency Injection
Unity, .NET için açık kaynaklı bir Dependency Injection kütüphanesidir. Bu kütüphane, .NET Framework'ün tamamen desteklediği DI prensiplerini uygular ve geliştiricilerin DI uygulama sürecini kolaylaştırır.
Unity'de, DI işlemi için UnityContainer sınıfı kullanılır. Bu sınıf, nesnelerin örneklerini oluşturmak ve uygulanması gereken bağımlılıkları yönetmek için kullanılır. Unity'de, Inversion of Control prensibi de otomatik olarak kullanılır. Bu sayede, geliştiricilerin DI fonksiyonunu çağırmalarına gerek kalmaz.
Unity ile sınıfın kurulumu oldukça basittir. Öncelikle, UnityContainer'ın bir örneği oluşturulur. Daha sonra, RegisterType() fonksiyonuyla sınıfın tipi belirtilir. Son olarak, Resolve() fonksiyonu çağrılarak, sınıfın örneği oluşturulur ve bağımlılıkları da otomatik olarak çözümlenir.
Code Snippet: |
---|
var container = new UnityContainer();container.RegisterType<ISampleService, SampleService>();var service = container.Resolve<ISampleService>(); |
Yukarıdaki kod örneği, ISampleService arayüzünden türetilen SampleService sınıfının örneğini Unity ile oluşturur. Sınıf, bir bağımlılık olan ISampleService arayüzünün kimliği belirtilerek kurulur. Daha sonra, sınıfın örneği Resolve() fonksiyonu çağrılarak oluşturulur.
Unity, .NET uygulamalarında sıkça tercih edilen bir DI kütüphanesidir. Tüm DI işlemlerinin otomatik olarak gerçekleştirilmesi ve basit kullanıma sahip olması nedeniyle, geliştiriciler tarafından sıklıkla tercih edilmektedir.
Unity ile Sınıfın Kurulumu
Unity, Dependency Injection uygulama sürecinde kullanılabilecek bir kütüphanedir. Sınıfın kurulumu, UnityContainer sınıfı kullanılarak gerçekleştirilir. Bu sınıf, Dependencies adı verilen nesnelerin yönetimi için kullanılır.
Unity kullanarak bir sınıfın kurulumu aşağıdaki gibi yapılabilir:
# | Kodu | Açıklama |
---|---|---|
1 | using Microsoft.Practices.Unity; | Unity kütüphanesinin eklenmesi |
2 | var container = new UnityContainer(); | UnityContainer sınıfının örneklenmesi |
3 | container.RegisterType<IInterface, Class>(); | Sınıfın türü ve kurulumu |
Yukarıdaki kod bloğunda, "Microsoft.Practices.Unity" kullanarak Unity kütüphanesi eklenir. Daha sonra, UnityContainer sınıfının örneği alınır ve sınıfın türü ve kurulumu "container.RegisterType
Bu şekilde, Unity kullanarak bir sınıfın kurulumu kolayca gerçekleştirilebilir.
Unity ile Dependency Injection Uygulama
Dependency Injection uygulamak için, Inversion of Control (IoC) prensibi kullanılır. Bu prensibe göre, sınıfların nesneleri oluşturmak yerine, nesnelerin kendilerinin oluşturulmasına izin verilir. Bu sayede, sınıflar birbirlerine bağlı olmadan kullanılabilir hale gelir.
Unity, DI prensibini otomatik olarak kullanarak, geliştiricilerin DI fonksiyonlarını çağırmalarına gerek kalmaz. Sınıfın örneği alınırken, UnityContainer nesnesi kullanılır ve gerektiğinde Unity, nesneleri sınıflara enjekte eder.
Unity ile DI uygulamak oldukça kolaydır. Öncelikle, UnityContainer nesnesi oluşturulur ve bu nesne, sınıfın örneğini almak için kullanılır. Daha sonra, UnityContainer nesnesi üzerinden RegisterType() fonksiyonu çağrılır ve sınıfın türü, nesnenin türüne atanan bir değer olarak belirtilir. Bu işlem, sınıfın örneğinin alınması için gereklidir.
Adım 1 | Adım 2 | Adım 3 |
---|---|---|
UnityContainer nesnesi oluşturulur. | RegisterType() fonksiyonu çağrılır ve sınıfın türü belirtilir. | Resolve() fonksiyonu çağrılır ve sınıfın örneği alınır. |
Unity ile DI uygulamanın bir diğer faydası, sınıfların değiştirilebilirliğini artırmasıdır. Yani, sınıflar arasında bağımlılık olmadığı için, bir sınıf kolayca değiştirilebilir veya yenisiyle değiştirilebilir. Bu, kodun daha esnek bir şekilde yönetilmesine olanak tanır ve yazılım maliyetlerini düşürür.