خانه » آموزش » اندروید » برسی 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 می شود. برای ساخت آن بدین صورت عمل می کنیم:

 

آموزش برنامه نویسی اندروید

درباره مهدی تاجیک

مهندس نرم افزار و مدیر پروژه. از سال 82 برنامه نویسی رو بصورت جدی شروع کردم و از سال 90 برنامه نویسی اندروید می کنم. علاقه زیادی به یادگرفتن و یاد دادن دارم.

۲ دیدگاه

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

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

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

*

bigtheme
error: Content is protected !!