Hilt कोड जनरेट करने के लिए, Hilt का इस्तेमाल करने वाले सभी Gradle मॉड्यूल का ऐक्सेस होना ज़रूरी है. कॉन्टेंट बनाने
Gradle मॉड्यूल, जो आपके
Application
क्लास में Hilt की सभी वैल्यू होनी चाहिए
मॉड्यूल और कंस्ट्रक्टर-इंजेक्टेड क्लास का इस्तेमाल अपनी ट्रांज़िटिव डिपेंडेंसी में किया जा सकता है.
अगर आपका मल्टी-मॉड्यूल प्रोजेक्ट सामान्य Gradle मॉड्यूल से बना है, तो आप Hilt का इस्तेमाल करें. इसके बारे में डिपेंडेंसी इंजेक्शन' में बताया गया है: हिलना. हालांकि, यह ऐसे ऐप्लिकेशन जिनमें सुविधा है मॉड्यूल का इस्तेमाल करें.
फ़ीचर मॉड्यूल में नीचे जाएं
फ़ीचर मॉड्यूल में, मॉड्यूल के एक-दूसरे पर निर्भर होने का तरीका इन्वर्टेड है. इसलिए, Hilt, फ़ीचर मॉड्यूल में एनोटेशन प्रोसेस नहीं कर सकता. आपको ऐसा ज़रूर करना चाहिए कार्रवाई करने के लिए डैगर का इस्तेमाल करें आपके सुविधा मॉड्यूल में डिपेंडेंसी इंजेक्शन का इस्तेमाल करना.
फ़ीचर मॉड्यूल के साथ इस समस्या को हल करने के लिए, आपको कॉम्पोनेंट डिपेंडेंसी का इस्तेमाल करना होगा. फ़ॉलो करें यह तरीका अपनाएं:
- घोषणा करें
@EntryPoint
इंटरफ़ेसapp
मॉड्यूल में (या किसी अन्य मॉड्यूल में, जिसे Hilt की मदद से प्रोसेस किया जा सके) इन डिपेंडेंसी के हिसाब से, फ़ीचर मॉड्यूल की ज़रूरत होती है. @EntryPoint
इंटरफ़ेस पर निर्भर डैगर कॉम्पोनेंट बनाएं.- सुविधा मॉड्यूल में हमेशा की तरह डैगर का इस्तेमाल करें.
डिपेंडेंसी इंजेक्शन
पेज को झुकाएं. मान लें कि आप अपने
आपके प्रोजेक्ट में login
फ़ीचर मॉड्यूल जोड़ा गया है. लॉगिन की सुविधा लागू करें
LoginActivity
नाम की गतिविधि के साथ. इसका मतलब है कि आपको बाइंडिंग मिल सकती हैं
ऐप्लिकेशन कॉम्पोनेंट से ही किया जा सकता है.
इस सुविधा के लिए, आपको authInterceptor
बाइंडिंग के साथ OkHttpClient
की ज़रूरत होगी.
सबसे पहले, SingletonComponent
में इंस्टॉल किया गया @EntryPoint
इंटरफ़ेस बनाएं
बाइंडिंग के साथ जिनकी login
मॉड्यूल की ज़रूरत है:
// LoginModuleDependencies.kt - File in the app module.
@EntryPoint
@InstallIn(SingletonComponent::class)
interface LoginModuleDependencies {
@AuthInterceptorOkHttpClient
fun okHttpClient(): OkHttpClient
}
// LoginModuleDependencies.java - File in the app module.
@EntryPoint
@InstallIn(SingletonComponent.class)
public interface LoginModuleDependencies {
@AuthInterceptorOkHttpClient
OkHttpClient okHttpClient();
}
LoginActivity
में फ़ील्ड इंजेक्शन चलाने के लिए, डैगर बनाएं
जो @EntryPoint
इंटरफ़ेस पर निर्भर करता है:
// LoginComponent.kt - File in the login module.
@Component(dependencies = [LoginModuleDependencies::class])
interface LoginComponent {
fun inject(activity: LoginActivity)
@Component.Builder
interface Builder {
fun context(@BindsInstance context: Context): Builder
fun appDependencies(loginModuleDependencies: LoginModuleDependencies): Builder
fun build(): LoginComponent
}
}
// LoginComponent.java - File in the login module.
@Component(dependencies = LoginModuleDependencies.class)
public interface LoginComponent {
void inject(LoginActivity loginActivity);
@Component.Builder
interface Builder {
Builder context(@BindsInstance Context context);
Builder appDependencies(LoginModuleDependencies loginModuleDependencies);
LoginComponent build();
}
}
ये चरण पूरे होने के बाद, अपने फ़ीचर मॉड्यूल में हमेशा की तरह डैगर का इस्तेमाल करें. इसके लिए
उदाहरण के लिए, SingletonComponent
की बाइंडिंग का इस्तेमाल
क्लास की डिपेंडेंसी:
// LoginAnalyticsAdapter.kt - File in the login module.
class LoginAnalyticsAdapter @Inject constructor(
@AuthInterceptorOkHttpClient okHttpClient: OkHttpClient
) { ... }
// LoginAnalyticsAdapter.java - File in the login module.
public class LoginAnalyticsAdapter {
private final OkHttpClient okHttpClient;
@Inject
LoginAnalyticsAdapter(
@AuthInterceptorOkHttpClient OkHttpClient okHttpClient
) {
this.okHttpClient = okHttpClient;
}
...
}
फ़ील्ड इंजेक्शन करने के लिए, डैगर कॉम्पोनेंट का इंस्टेंस बनाएं
SingletonComponent
डिपेंडेंसी पाने के लिए applicationContext
का इस्तेमाल करना:
// LoginActivity.kt - File in the login module.
class LoginActivity : AppCompatActivity() {
@Inject
lateinit var loginAnalyticsAdapter: LoginAnalyticsAdapter
override fun onCreate(savedInstanceState: Bundle?) {
DaggerLoginComponent.builder()
.context(this)
.appDependencies(
EntryPointAccessors.fromApplication(
applicationContext,
LoginModuleDependencies::class.java
)
)
.build()
.inject(this)
super.onCreate(savedInstanceState)
...
}
}
// LoginActivity.java - File in the login module.
public class LoginActivity extends AppCompatActivity {
@Inject
LoginAnalyticsAdapter loginAnalyticsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
DaggerLoginComponent.builder()
.context(this)
.appDependencies(
EntryPointAccessors.fromApplication(
getApplicationContext(),
LoginModuleDependencies.class
)
)
.build()
.inject(this);
super.onCreate(savedInstanceState);
...
}
}
फ़ीचर मॉड्यूल में, मॉड्यूल डिपेंडेंसी के बारे में ज़्यादा जानकारी पाने के लिए, यहां देखें सुविधा के साथ कॉम्पोनेंट डिपेंडेंसी मॉड्यूल का इस्तेमाल करें.
Android पर डैगर के बारे में ज़्यादा जानकारी के लिए, Android में डैगर का इस्तेमाल करना देखें ऐप्लिकेशन हैं.