Izax
Izax
خواندن ۳ دقیقه·۵ سال پیش

Dagger 2 ___ Part 2

در بخش قبلی این آموزش مقدمه ای درباره تزریق وابستگی گفته شد ،و در این بخش به تشریح کتابخانه dagger2 می پردازیم .

در بحث تزریق وابستگی سه بخش کلیدی داریم :

  1. بخشی که وابستگی ها را ارائه می دهد .
  2. بخشی که این وابستگی ها را مصرف می کند .
  3. بخشی که دو بخش بالا را یعنی ارائه دهنده و مصرف کننده را بهم متصل می کند .

چارچوب اصلی dagger2 همین سه بخش بالا می باشند . نکته ای که باید توجه داشته باشید بسیاری از کتابخانه ها برای سهولت استفاده و تمیزتر و کمتر شدن کدها از مبحث Annotation processing استفاده می کنند و dagger هم از این قضیه مستثنا نیست ! پس برای درک واضح این کتابخانه و امثالهم آشنایی با Annotation processing بسیار مهم است .

با یک سناریو کوچیک سه بخش بالارو توضیح میدم :

خب یک Hero داریم که Power های مخصوص خودشو داره !! و کلاس های ما به شکل زیر می باشند :

public class Main { public static void main(String[] args){ Power power = new Power(); Hero hero = new Hero(power); }


public class Hero { Power power ; Hero(Power power) { this.power = power ; } }


public class Power { }

خب حالا میخوایم بحث تزریق وابستگی رو با dagger2 در مثال ساده بالا پیاده کنیم .

  • بخش ارائه دهنده اشیا (ارائه دهنده وابستگی ها):

این بخش یک کلاس است که با Module@ نشان گذاری می شود و داخل این کلاس متد های با مقدار برگشتی اشیا وجود دارد که با Provides@ نشان گذاری می شود ! برای مثال بالا ارائه دهنده ما به اینصورت است :

import dagger.Module; import dagger.Provides; @Module public class Provider { @Provides static Power providerPower() { return new Power(); } }


ارائه دهنده بالا یک متد به نام providerPower دارد که شی Power را برای ما برمی گرداند ! و کجا این شی مصرف می شود ؟!

در کلاس Hero ما این شی مصرف میشود :|

  • خب پس بخش دوم مصرف کننده :

از حاشیه نویسی Inject برای مشخص کردن مصرف کننده استفاده می شود . برای مثال ما کلاس Hero ما به شکل زیر می شود :

import javax.inject.Inject; public class Hero { Power power ; @Inject Hero(Power power) { this.power = power ; } }

خب و در آخر نوبت به بخش سوم یعنی اتصال ارائه دهنده و مصرف کننده :

این بخش یک اینترفیس است که با حاشیه نویسی Component@ مشخص می گردد و آرگومان این حاشیه نویسی کلاس ارائه دهنده ما است ! برای مثال ما این اتصال دهنده چیزی شبیه :

import dagger.Component; @Component( modules = Provider.class ) public interface Connector { Hero injectPower(); }

اما بعد از build کردن پروژه ،dagger میادو یک کلاس به نام(Dagger + InterfaceName) DaggerConnector درست می کند و از این به بعد ما با این کلاس سروکار داریم تا مستقیما با اشیای دیگر !!

پس ما کد کلاس Main خود را به صورت زیر تغییر می دهیم :

public class Main { public static void main(String[] args) { Hero hero = createHero(); } private static Hero createHero() { Connector connector = DaggerConnector.create(); return connector.injectPower(); } }

تمام !

اگه برای بار اول دارین DI استفاده میکنین و آشناییم با Annotation processing ندارین خیلی خیلی طبیعی که یکم گیج شده باشین ;) ولی آستینارو بالا بزنین و انجامشون بدین .

در بخش بعد این آموزش همین مثال Hero با کمی کامل کردنش در اندروید استدیو پیاده می کنیم .

موفق باشید :)


dagger2آموزش dagger 2dependency injectionتزریق وابستگی با daggerتزریق وابستگی
Software engineer
شاید از این پست‌ها خوشتان بیاید