Dagger高级用法:任性inject
2016-03-31 00:00
477 查看
Dagger高级用法:任性inject
用了注入之后,就有这么一个需求:随时随地任性inject :), 对!我们将提供inject的注入,这样我们就可以实现任性inject!开启我们的任性之旅吧
定义
Injector接口
public interface Injector { public void inject(Object object); }
Application中实现
Injector接口
public class App extends Application implements Injector{ private ObjectGraph applicationGraph; @Override public void onCreate() { super.onCreate(); applicationGraph = ObjectGraph.create(getModules().toArray()); applicationGraph.inject(this); } protected List<Object> getModules() { return Arrays.<Object>asList(new AppModule(this)); } @Override public void inject(Object object) { applicationGraph.inject(object); } }
创建
InjectorModule
@Module( library = true ) public class InjectorModule { private App app; public InjectorModule(App app) { this.app = app; } @Provides@Singleton public Injector providerInjector() { return app; } }
关键的一步:借助构造方法的参数随时随地获取
Injector,并将含有注入的对象注入;
@Singleton public class SingletonModule { private Injector injector; @Inject public SingletonModule(Injector injector) { this.injector = injector; } public void doToast() { InjectHandler handler = new InjectHandler(); injector.inject(handler); handler.sendEmptyMessage(1); } }
public class InjectHandler extends Handler{ @Inject Toast toast; @Override public void handleMessage(Message msg) { super.handleMessage(msg); toast.setText("InjectHandler"); toast.show(); } }
notice:在提供Toast的Provider的Module中加入injects = InjectHandler.class、在AppModule中includes = InjectorModule.class、在ObjectGraph.create中加入new InjectorModule(this)
调用
public class MainActivity extends AppCompatActivity { @Inject SingletonModule sToast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); ((App) getApplicationContext()).inject(this); sToast.doToast(); } }
任性之旅已经结束,欢迎下次再来任性。
总结:
任性并不是在任何地方,而是有一个前提条件需要@Singleton修饰Class, @Inject修饰构造方法,构造方法中就是一个获取Injector的机会,由此可见,任性只有一次机会;拿到Injector那就是任性的开始。
继续任性的话只需要重复步骤4即可。
相关文章推荐
- 黑苹果 安装卡在 GeforceSensors:still waiting for accelerator to start
- 黑苹果 安装卡在 GeforceSensors:still waiting for accelerator to start
- android手机安装无法解析文件 真机测试google device driver 无法识别手机
- android手机安装无法解析文件 真机测试google device driver 无法识别手机
- Metaio in Unity3d 教学--- 一. 搭建环境,运行官方案例
- apache mod_rewrite
- Android onActivityResult intent==null
- Metaio in Unity3d 教学--- 一. 搭建环境,运行官方案例
- apache mod_rewrite
- Android onActivityResult intent==null
- 租用德国服务器有哪些好处
- KeyMob移动广告聚合平台-KeyMob广告聚合服务
- 国内领先的移动广告聚合平台-KeyMob移动广告聚合平台
- 拥有丰富经验的移动广告聚合平台-KeyMob
- KeyMob:移动应用广告的管理者
- KeyMob:为国内应用开发者管理的移动广告聚合平台
- 移动广告聚合平台KeyMob:整合多家移动广告平台
- IOS开发学习-程序启动原理
- java 实现棋盘覆盖问题
- EasyCode