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
services[String(describing: type)] = with
}
public func resolve
guard let service = services[String(describing: type)] as? T else {
fatalError(“No service registered for type \(String(describing: type))”)
}
return service
}
public func autoregister
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