Sobes.tech
Middle+

Dagger Hilt'ta aynı sınıfın farklı örneklerini nasıl sağlayabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Dagger Hilt'ta aynı sınıfın farklı örneklerini sağlamak için nitelendiriciler (@Named veya özel olanlar) kullanabilirsiniz.

  1. Nitelendiricilerin oluşturulması:

    • Basit durumlar için @Named kullanın ve bir dize adı belirtin.
    • Daha karmaşık senaryolar veya daha iyi semantik için kendi özel nitelendirici anotasyonlarınızı oluşturun.
    // Özel bir nitelendirici örneği
    @Qualifier
    @Retention(AnnotationRetention.RUNTIME)
    annotation class ProductionApi
    
    @Qualifier
    @Retention(AnnotationRetention.RUNTIME)
    annotation class TestApi
    
  2. Nitelendiriciler kullanılarak farklı örneklerin bağlanması:

    • Hilt modüllerinde (@Module), @Provides veya @Binds ile sınıflar içinde, nitelendirici anotasyonlarını dönen metodlarda kullanın.
    @Module
    @InstallIn(SingletonComponent::class) // Örnek kapsam
    object AppModule {
    
        @Provides
        @Singleton // Kapsam örneği
        @Named("개발") // "Geliştirme için" örneği için @Named nitelendiricisi
        fun provideDevRepository(): Repository {
            return Repository("Geliştirme ortamı") // Farklı örnek veya yapılandırma
        }
    
        @Provides
        @Singleton // Kapsam örneği
        @Named("운영") // "Üretim için" örneği için @Named nitelendiricisi
        fun provideProdRepository(): Repository {
            return Repository("Üretim ortamı") // Farklı örnek veya yapılandırma
        }
    
        // Özel nitelendiricilerin kullanımı
        @Provides
        @Singleton
        @ProductionApi
        fun provideProductionService(): MyService {
            return MyService("Production API uç noktası")
        }
    
        @Provides
        @Singleton
        @TestApi
        fun provideTestService(): MyService {
            return MyService("Test API uç noktası")
        }
    }
    
  3. Belirli bir örneğin enjeksiyonu:

    • Bağımlılığı enjekte etmek istediğiniz yerlerde (@AndroidEntryPoint), alan veya yapıcı parametresi uygun nitelendirici ile anotelenmelidir.
    @AndroidEntryPoint // Örneğin, Fragment veya Activity
    class MyFragment : Fragment() {
    
        @Inject
        @Named("개발") // "Geliştirme" örneğini enjekte eder
        lateinit var devRepository: Repository
    
        @Inject
        @Named("운영") // "Üretim" örneğini enjekte eder
        lateinit var prodRepository: Repository
    
        @Inject
        @ProductionApi // Üretim için özel nitelendirici ile örneği enjekte eder
        lateinit var productionService: MyService
    
        // ... bağımlılıkların kullanımı ...
    }