Pojo类的依赖注入

Cil*_*nco 0 dependency-injection dagger-2

目前我正在努力了解依赖注入.假设我有以下课程:

专辑

public class Album {
    private String id;
    private String name;
    private String cover;
    private Artist artist;
}
Run Code Online (Sandbox Code Playgroud)

歌曲

public class Song  {
    private String id;
    private String title;
    private Artist artist;
    private Album album;
}
Run Code Online (Sandbox Code Playgroud)

艺术家

public class Artist {
    private String id;
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

因此,Song依赖于AlbumArtistAlbum依赖Artist.假设我从数据库中获取所有必需的字段.目前,所有成员都通过构造函数传入.通常我会多次创建相同的专辑对象(在同一专辑的每首歌的循环中).这是依赖注入可以避免的吗?

我如何用Dagger2做到这一点?我真的不明白这一点.这只是"将构造函数"移出课堂吗?

Dav*_*jak 5

如果你使用Dagger来创建你的模型类,你肯定做错了什么.

当然,理论上这是可能的.你仍然需要一个循环,但现在你将创​​建你的组件并传入参数,以便他们可以分别创建他们的Artist,他们的Album和他们的Song.一个ArtistComponent是它提供ArtistAlbumComponent,等等.

最后你仍然有一个循环,但这次只是创建组件来创建你需要的对象.你在这里获得的唯一的东西是很多开销和比以前更多的对象创建.所以不,请不要在这里使用Dagger.


依赖注入旨在将您的业务逻辑链接在一起.如果您有ArtistDao从数据库中读取的内容,那么您可能还ArtistPresenter需要使用DAO才能工作.ArtistDao仍然可以读取和创建艺术家(数据模型),但您可以使用Dagger创建DAO并将其传递给演示者.

这只是"将构造函数"移出课堂吗?

匕首不会神奇地创造物体.如果您有依赖项,您仍然在构造函数中声明该依赖项.Dagger将使用正确的参数为您调用构造函数,并可能将创建的对象保留在以后(范围).

依赖框架旨在减少样板,创建一个对象,将其传递给下一个对象,等等.它们将解析您的依赖关系,并保持它们.