你是对的。从长远来看,使用注入只会对您有所帮助。您可以花 5 分钟时间设置您的模块/组件,也可以只是编码。
只要你不做适当的测试,没有太大的区别,如果你的演示者看起来像下面这样
mPresenter = new Presenter();
假设您正确使用构造函数注入,在创建组件后,您可以节省一些行
@Inject Presenter mPresenter;
// onCreate or some other place
{
getComponent().inject(this); /* getComponent() also 4-5 lines */
}
再次。如果您使用正确的构造函数注入,则很有可能您没有很多模块代码。只需创建一些组件即可。
但是您节省了一些时间,并且一旦您想进行测试,这只是一些简单的重构,可以很快完成。
那为什么是匕首?
这是假设您的演示者不依赖于其他对象。但如果是这样呢?
SharedPreferences preferences = getPreferences();
MyStorage storage = new MyStorage(preferences);
mPresenter = new Presenter(storage);
使用某些东西来存储您的数据是一个很好的用例。虽然您只是在 Activity 中添加了更多关于对象创建的逻辑,但 dagger 实现看起来仍然相同。
更多?
现在让我们假设您想在活动之间从上面分享这个storage。现在,您必须在 Application 或其他可以创建 Singleton 以在整个应用程序中使用的地方添加一些逻辑。
不过,这可能不是您唯一的单身人士,而且您的Application 也会开始混乱。不要让我开始管理这些对象的生命周期,例如用户登录或退出,请务必清除缓存数据!
再次。匕首实现看起来仍然相同。如果需要更多逻辑,则可以很好地放置在模块中,并通过组件依赖项进行抽象。
一旦你开始思考我可以创建处理对象构造和注入的类你就知道你一开始就可以使用 dagger ;)
我还写了一篇关于 dagger basics 的博客文章,其中包括构造函数注入的工作原理,许多初学者由于某种原因没有正确使用。