Takip et

Swift’te Basit Bir Bağımlılık Enjeksiyon Çerçevesi Oluşturma [Bölüm 3]: Otomatik Kayıt

Swift’te Basit Bir Bağımlılık Enjeksiyon Çerçevesi Oluşturma [Bölüm 3]: Otomatik Kayıt

Bu yazıda, daha önceki iki yazıda yarattığımız basit bağımlılık enjeksiyon çerçevesini geliştirerek otomatik kayıt özelliğini ekleyeceğiz. Otomatik kayıt, bağımlılıklarımızın çerçevemize otomatik olarak kaydedilmesini sağlayarak kodumuzu daha da temiz ve düzenli hale getirecektir.

Otomatik Kayıt Özelliği

Otomatik kayıt, belirli bir protokolü uygulayan tüm sınıfları veya yapıları otomatik olarak çerçevemize kaydettiğimizde devreye girer. Bu, bağımlılıklarımızın çerçevemize manuel olarak kaydedilmesi ihtiyacını ortadan kaldırarak kodu daha özlü hale getirir.

Örneğin, önceki yazılarda oluşturduğumuz Logger protokolünü ele alalım. Bir ConsoleLogger ve FileLogger sınıfı tanımlayarak bu protokolü uyguladık. Otomatik kayıt özelliği ile bu sınıfları çerçevemize manuel olarak kaydetmek zorunda kalmayacağız. Bunun yerine, çerçevemiz otomatik olarak Logger protokolünü uygulayan tüm sınıfları tanıyacak ve kaydedecektir.

Kod Örneği

Otomatik kaydı eklemek için Container sınıfımıza yeni bir fonksiyon eklememiz gerekiyor. Bu fonksiyon, verilen bir protokolü uygulayan tüm sınıfları tarayacak ve çerçevemize kaydedecektir.

“`swift
public final class Container {
private var services = [String: Any]()

public init() {}

public func register(type: T.Type, with: T) {
services[String(describing: type)] = with
}

public func resolve(type: T.Type) -> T {
guard let service = services[String(describing: type)] as? T else {
fatalError(“No service registered for type \(String(describing: type))”)
}
return service
}

public func autoregister(for protocolType: T.Type) {
let allClasses = Bundle.allBundles.compactMap { $0.infoDictionary?[“CFBundleExecutable”] as? String }
.compactMap { NSClassFromString($0) as? NSObject.Type }

for type in allClasses where type conformsToProtocol(protocolType) {
services[String(describing: protocolType)] = type.init()
}
}
}
“`

Yukarıdaki kodda, autoregister fonksiyonu verilen bir protokoli (protocolType) alır. Ardından, tüm bağlamaları (Bundle.allBundles) tarar ve belirtilen protokoliyi uygulayan tüm sınıfları bulur. Bu sınıflar, services sözlüğüne otomatik olarak kaydedilir.

Kullanım Örneği

Otomatik kaydı kullanmak için, Container sınıfımızın bir örneğini oluşturur ve autoregister fonksiyonunu Logger protokolüyle birlikte çağırırız:

“`swift
let container = Container()
container.autoregister(for: Logger.self)
“`

Artık, çerçevemiz Logger protokolünü uygulayan tüm sınıfları (ConsoleLogger ve FileLogger gibi) otomatik olarak kaydetti. Bu, bağımlılıklarımızın çerçevemize manuel olarak kaydedilmesi ihtiyacını ortadan kaldırarak kodu daha da temiz ve düzenli hale getirir.

Sonuç

Bu yazıda, basit bir bağımlılık enjeksiyon çerçevesine otomatik kayıt özelliğini ekledik. Bu özellik, bağımlılıklarımızın çerçevemize otomatik olarak kaydedilmesini sağlayarak kodumuzu daha da temiz ve düzenli hale getirmemize yardımcı olur. Otomatik kayıt, kodun okunabilirliğini ve bakımı kolaylaştırır.

Eğer bağımlılık enjeksiyon çerçeveleri hakkında daha fazla bilgi edinmek isterseniz, [fatihsoysal.com](https://fatihsoysal.com) web sitesini ziyaret edebilirsiniz. Bu web sitesinde, bağımlılık enjeksiyonunun avantajları, uygulaması ve çeşitli çerçeveler hakkında daha ayrıntılı bilgiler bulabilirsiniz.

#Etiketler
Bağımlılık Enjeksiyonu, Swift, Otomatik Kayıt, Çerçeve, Yazılım Geliştirme, Programlama, Kod Kalitesi, Temiz Kod, Özlü Kod, Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.