این نوشتار مربوط به بخش پنجم از کُدلب آموزشی استفاده از Dagger در پروژه اندرویدی به زبان کاتلین هست و میتونید بخش قبلی رو از اینجا بخونید.
گاهی اوقات شما به چند دلیل میخواهید که از یک وابستگی در کامپوننت instance یکسانی داشته باشید:
1- تایپی دارم که چندتا کلاس ازش استفاده میکنند و نمیخوام هی ساخته بشه و لازمه که instance یکسانی توسط این کلاسها به اشتراک گذاشته بشه.(در این جا UserManager)
2- آبجکتی دارم مثل JSON Parser که ساختش هزینه زیادی داره و نمیخوام هربار که به عنوان وابستگی اعلان میشه، هی دوباره ساخته شه
این جور مواقع از مفهومی به نام scope استفاده میکنیم تا instance یکسانی از یک تایپ در یک کامپوننت داشته باشیم. به اینکار اسکوپ کردن یک تایپ به لایف سایکل کامپوننت هم گفته میشه. تا وقتی اون کامپوننت در حافظه هست، ما هم همین یک دونه instance از اون کلاس رو داریم و از بین نمیره و دوباره هم ساخته نمیشه.
با سینگلتون که آشنایی دارید؟ جواب شما : البته که داریم !!?
خب اینجا یک انوتیشن اسکوپ داریم به نام @Singleton
. بالای سر اسم AppComponent و اون کلاسی که میخوایم یک بار ازش ساخته بشه در طول زندگی این کامپوننت (اینجا UserManager) یک انوتیشن سینگلتون می ذاریم. تمام!
سینگلتون که از قبل داشتیم ولی اگر لازم باشه خودمونم می تونیم انوتیشن اسکوپ بسازیم خیلی جالب و راحت که در ادامه یادتون میدم.
سینگلتون تنها انوتیشن اسکوپی هست که در پکیج javax.inject
قرار داره.
پس چی شد؟
وقتی ما یک کامپوننت رو با Singleton انوتیت کنیم، همه کلاسهایی که با این انوتیشن مشخص بشن، به لایف سایکل اون کامپوننت وصل میشن یا اسکوپ میشن یا محدود میشن.
حالا AppComponent.kt
رو باز کنید و با سینگلتون اون رو انوتیت کنید.
حالا هر کلاسی که با سینگلتون انوتیت بشه به AppComponent اسکوپ خواهد شد! پس بیایید اینکارو برای UserManager انجام بدیم:
در این مرحله دوباره پروژه رو اجرا کنید. مجددا ثبت نام انجام بدید و ببینید چی میشه؟
وقتی ثبت نام رو انجام می دید وارد جریان main میشید. مشکل حل شد!
راه حل پروژه که در تا اینجا بهش رسیدید در برنچ 1_registration_main کد گیتهاب وجود داره.
و باز بیایید ببینیم گراف برنامه تا اینجا چه شکلی شده؟
در بخش بعدی قراره با SubComponent ها آشنا بشیم.
کُدلَب استفاده از دَگر در برنامه اندرویدی (6-SubComponent)
کُدلَب استفاده از دَگر در برنامه اندرویدی (4-تزریق گراف به اکتیوتی)
کُدلَب استفاده از دَگِر در برنامه اندرویدی (3-انوتیشنها)