Sanırım öncülünüz burada biraz karışık, bir fabrikaya enjeksiyon yapmaktan bahsediyorsunuz, ancak fabrika deseni, DI çerçeveleri bu desen yaygın olmadığında, bir bağımlılık enjeksiyon çerçevesinin ne yaptığının bir alt kümesini yapmak olan yaratıcı bir modeldir. bu nedenle kullanışlıdır. Bununla birlikte, bir DI çerçeveniz varsa, DI çerçevesi fabrikanın yerine getireceği amacı yerine getirebileceğinden artık bir fabrikaya ihtiyacınız yoktur.
Bununla birlikte, bağımlılık enjeksiyonu ve genel olarak nasıl kullanacağınız hakkında biraz açıklayayım.
Bağımlılık enjeksiyonu yapmanın çeşitli yolları vardır, ancak en yaygın olanı yapıcı enjeksiyonu, özellik enjeksiyonu ve doğrudan DIContainer'dir. Özellik enjeksiyonu çoğu zaman yanlış yaklaşım (çoğu zaman doğru yaklaşım) olduğundan ve diğer yaklaşımlardan hiçbirini kesinlikle yapamayacağınız durumlar dışında DIContainer erişimi tercih edilmediğinden kurucu enjeksiyonu hakkında konuşacağım.
Yapıcı enjeksiyonu, bir bağımlılık için arabirime ve bu bağımlılık için somut uygulamayı bilen bir DIContainer'a (veya fabrikaya) sahip olduğunuz yerdir ve bu arayüze bağlı bir nesneye ihtiyaç duyduğunuz her yerde, inşaat sırasında uygulamayı fabrikadan teslim edersiniz. o.
yani
IDbConnectionProvider connProvider = DIContainer.Get<IDbConnectionProvider>();
IUserRepository userRepo = new UserRepository(connProvider);
User currentUser = userRepo.GetCurrentUser();
Birçok DI çerçevesi, bunu DIContainer'ınızın UserRepository yapıcısını somut uygulamaları bildiği arabirimler için inceleyeceği ve bunları sizin için otomatik olarak teslim edeceği yerde önemli ölçüde basitleştirebilir; Bu tekniğe sıklıkla İnversiyon Kontrol denir, ancak DI ve IoC'nin her ikisi de çok fazla değişime uğrayan ve belirsiz (varsa) farklılıklara sahip terimlerdir.
Şimdi, kapsayıcı kodun DIContainer'a nasıl eriştiğini merak ediyorsanız, ona erişmek için statik bir sınıfa sahip olabilirsiniz veya daha uygun olan şey, çoğu DI çerçevesinin bir DIContainer'ı yenileyebilmenize izin vermesidir; verilen arayüzler için somut olduğunu bildiği türler için dahili tekton sözlüğüne bir sarıcı.
Bu, kodda istediğiniz yerde DIContainer'ı yenileyebilir ve arayüz-somut ilişkilerinizi bilmek için önceden yapılandırdığınız DIContainer'ı etkili bir şekilde alabilirsiniz. DIContainer'ı doğrudan onunla etkileşime girmemesi gereken kod bölümlerinden gizlemenin olağan yolları, sadece gerekli projelerin DI çerçevesine referans olmasını sağlamaktır.