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.
-
Nitelendiricilerin oluşturulması:
- Basit durumlar için
@Namedkullanı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 - Basit durumlar için
-
Nitelendiriciler kullanılarak farklı örneklerin bağlanması:
Hiltmodüllerinde (@Module),@Providesveya@Bindsile 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ı") } } -
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ı ... } - Bağımlılığı enjekte etmek istediğiniz yerlerde (