通过这个简单的示例
public class MyApp extends Application {
private static MyApp app;
private ImageDownloaderComponent imageDownloaderComponent; // dagger2
ImageDownloader imageDownloader;
@Override
public void onCreate() {
super.onCreate();
app = this;
imageDownloaderComponent = DaggerImageDownloaderComponent.builder().imageDownloaderModule(new ImageDownloaderModule(this)).build();
imageDownloader=new ImageDownloader(this);
}
public static MyApp app(){
return app;
}
public ImageDownloaderComponent getImageDownloaderComponent(){
return this.imageDownloaderComponent;
}
}
使用Dagger2
public class MainActivity extends AppCompatActivity {
@Inject ImageDownloader downloader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyApp.app().getImageDownloaderComponent().inject(this);
ImageView imageView = findViewById(R.id.main_image);
downloader.toImageView(imageView, "https://..../fruits.png");
} }
不带匕首2
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ImageView imageView = findViewById(R.id.main_image);
MyApp.app().imageDownloader.toImageView(imageView, "https://---/fruits.png");
}
}
两种情况下的活动均正常进行。我的问题为什么我们甚至需要dagger2甚至由应用程序类执行的相同任务?如何有效?我用谷歌搜索,除了那里有什么好处之外,我还很容易进行测试?在以上示例中,哪个活动好?为什么?
答案 0 :(得分:1)
我们知道Dagger是依赖注入。
使匕首独特的简述:
优点:
如果我们在像您给定的非常小的项目/任务中使用匕首,则匕首不会 值得的。它将在中长期的应用中更加有效。因为它有助于我们避免代码中不必要的对象创建。
我们可以使用匕首通过对象图重用对象。
我们可以定义自定义范围,也有一些已经定义的范围,例如Singleton,匕首中有一些不错的概念,例如组件依赖项和 sub组件。
可以注入Class,Object,Constructor。