Google
خانه / آموزش / برسی Scope@ ها در Dagger2

برسی Scope@ ها در Dagger2

@Scope annotation

اصولا هدف استفاده از این انوتیشن معرفی Scope آبجک تولید شده توسط Dagger2 است. یعنی Dagger2 به شما این امکان را می دهد تا Object های شما چرخه عمر متفاوت داشته باشند و شما فقط تعریف می کنید، پیاده سازی اش با خود Dagger است. فرض کنید که سه component به شرح زیر داریم و سلسله مراتب ارتباط و وابستگی Component ها هم مشخص است.

و ما برای آنها سه اسکوپ تعریف می کنیم. ActivityScope, UserScope, Applicationscope(singletone).

Dagger2 به طور پیش فرض singletone یا همان applicationScope را دارد و چرخه عمرآن با چرخه عمر Application یکی است. احتمالاً در کد autogenerated خودش بصورت static نگهداری می کند. استفاده از این اسکوپ ها مانند این است که tag تعریف کنیم و اسمشان اهمیتی ندارد. فقط Object ای که با اسکوپ خاصی تولید می شود، طول عمر و LifeCycle اش با صدا زننده آن یکی خواهد شد. مثلا اگر یک Object با ActivityScope@ داریم که در درون activity تزریق می شود، Lifecycle  آن با Lifecycle مربوط به activity یکی می شود و تا زمانی وجود دارد که Activty تزریق کننده آن وجود داشته باشد و کنترل کردن آن اتوماتیک توسط Dagger2 انجام می شود.

به تصویر زیر توجه کنید:

ApplicationScope در طول کل برنامه وجود دارد. پس ما برای هر آیتمی این اسکوپ را بگذاریم تا پایان برنامه وجود خواهد داشت. با شروع هر اکتیویتی، ActivityScope شروع و با بسته شدن آن اسکوپ هم تمام می شود. همچنین برای UserScope. با انتخاب یا ساخت هر یوزری شروع و  در نهایت با رهاکردن آن، تمام می شود.

پس یادمان باشد که نام Scope ها مهم نیست. بلکه این مهم است که برای چه Provider ای تعریف شده و آن Object در چه کلاسی Inject می شود. برای ساخت آن بدین صورت عمل می کنیم:

منبع: بایت کد

۷ دیدگاه

  1. ممکنه راهنماییم کنید چطور میتونم از متدهای یک ماژول بعنوان ورودی متدهای دیگه در یک ماژول دیگه استفاده کنم؟

  2. سلام. لطفا کمی بیشتر در مورد singleton@ توضیح بدید. یه جا خوندم که نباید از این انوتیشن استفاده کنیم چون فقط برای اپ هایی با یک اکتیویتی کارایی دارن که بنظرم صحبت منطقی ای نبود. آیا کارایی Singleton@ چیزی شبیه به متغیر final static هست؟

    • این انوتیشن از پکیج javax.inject است که برای معرفی life cycle کامپوننت ها استفاده می شود و به این معنی است که در طول کل اپ یکبار ساخته شود و یک نمونه داشته باشد و از همان استفاده شود. اینکه چرا بجای انوتیشن از روش های دیگری استفاده نمی کنیم این است که استفاده از آن را dagger برای ما مشخص کرده است. حالا اگر بخواهم توضیح راجع به تفاوت singleton و final static را بدهم باید بگویم بله تقریباً مشابه است. اگر روش پیاده سازی کلاسیک singleton را ببینید دقیقاً یک متغیر static از جنس خود کلاس دارد و در ارجاع اولیه آن (که هنوز مقددار دهی نشده و null است) یک نمونه ساخته و آن را مقدار دهی می کند و در ارجاعات بعدی همان نمونه ساخته شده تحویل می دهد.

  3. متشکرم از اموزش های عالیتون

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

bigtheme