হিল্ট কোড জেনারেশনের জন্য হিল্ট ব্যবহার করে এমন সমস্ত গ্রেডল মডিউলগুলিতে অ্যাক্সেস প্রয়োজন। গ্রেডল মডিউল যা আপনার Application
ক্লাসকে কম্পাইল করে তার ট্রানজিটিভ নির্ভরতায় সমস্ত হিল্ট মডিউল এবং কনস্ট্রাক্টর-ইনজেক্টেড ক্লাস থাকতে হবে।
যদি আপনার মাল্টি-মডিউল প্রজেক্টটি নিয়মিত গ্রেডল মডিউল দ্বারা গঠিত হয়, তাহলে আপনি হিল্টের সাথে নির্ভরতা ইনজেকশনে বর্ণিত হিল্ট ব্যবহার করতে পারেন। যাইহোক, বৈশিষ্ট্য মডিউলগুলি অন্তর্ভুক্ত করে এমন অ্যাপগুলির ক্ষেত্রে এটি হয় না।
বৈশিষ্ট্য মডিউল হিল্ট
বৈশিষ্ট্য মডিউলগুলিতে, মডিউলগুলি সাধারণত একে অপরের উপর নির্ভর করে উল্টানো। অতএব, হিল্ট বৈশিষ্ট্য মডিউলগুলিতে টীকা প্রক্রিয়া করতে পারে না। আপনার বৈশিষ্ট্য মডিউলগুলিতে নির্ভরতা ইনজেকশন সঞ্চালনের জন্য আপনাকে অবশ্যই ড্যাগার ব্যবহার করতে হবে।
বৈশিষ্ট্য মডিউলগুলির সাথে এই সমস্যাটি সমাধান করতে আপনাকে অবশ্যই উপাদান নির্ভরতা ব্যবহার করতে হবে। এই পদক্ষেপগুলি অনুসরণ করুন:
-
app
মডিউলে একটি@EntryPoint
ইন্টারফেস ঘোষণা করুন (অথবা অন্য কোনও মডিউল যা হিল্ট দ্বারা প্রক্রিয়া করা যেতে পারে) বৈশিষ্ট্য মডিউলটির প্রয়োজনীয় নির্ভরতা সহ। - একটি ড্যাগার উপাদান তৈরি করুন যা
@EntryPoint
ইন্টারফেসের উপর নির্ভর করে। - ফিচার মডিউলে যথারীতি ড্যাগার ব্যবহার করুন।
হিল্ট পৃষ্ঠার সাথে নির্ভরতা ইনজেকশন থেকে উদাহরণটি বিবেচনা করুন। ধরুন আপনি আপনার প্রকল্পে একটি login
বৈশিষ্ট্য মডিউল যোগ করুন। আপনি LoginActivity
নামক একটি কার্যকলাপের সাথে লগইন বৈশিষ্ট্য বাস্তবায়ন করেন। এর মানে হল যে আপনি শুধুমাত্র অ্যাপ্লিকেশন উপাদান থেকে বাইন্ডিং পেতে পারেন।
এই বৈশিষ্ট্যের জন্য, আপনার authInterceptor
বাইন্ডিং সহ একটি OkHttpClient
প্রয়োজন।
প্রথমে, login
মডিউলের জন্য প্রয়োজনীয় বাইন্ডিং সহ SingletonComponent
এ ইনস্টল করা একটি @EntryPoint
ইন্টারফেস তৈরি করুন:
কোটলিন
// 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); ... } }
বৈশিষ্ট্য মডিউলগুলিতে মডিউল নির্ভরতা সম্পর্কে আরও প্রসঙ্গের জন্য, বৈশিষ্ট্য মডিউল সহ উপাদান নির্ভরতা দেখুন।
অ্যান্ড্রয়েডে ড্যাগার সম্পর্কে আরও তথ্যের জন্য, অ্যান্ড্রয়েড অ্যাপগুলিতে ড্যাগার ব্যবহার দেখুন।