使用匕首,你需要把你的fooList
成您的Foo
類的依賴關係。你可以用@Inject
註釋來做到這一點。這將告訴Dagger,當Dagger創建Foo
時,還需要注入List<String> fooList
。請記住,fooList
在我的示例中不是私有的。由於Dagger不使用反射並使用代碼生成,所以您必須將可注射域聲明爲公共或私有範圍。
public class Foo {
@Inject
@Named("FooDependency")
List<String> footList;
// getter and setter
}
在這裏,因爲名單是一種常見的類型,我們用@Named("FooDependency")
標註它在那裏「FooDependency」可以是任何你想要的字符串。我們這樣做是因爲在所有可能的情況下,您都希望在應用程序中注入另一個List<String>
,並且我們希望能夠區分2.其他List<String>
例如可以用@Named("ADifferentDependency")
進行註釋。
然後,您需要在您的模塊之一中註釋一個使用@Provide
的方法,該模塊將負責提供該依賴關係。
@Module(injects = Foo.class)
public class SomeModule {
@Provide
@Named("FooDependency")
public List<String> provideFooDependencyListOfString() {
return Arrays.asList("1", "2", "3");
}
}
然後你可以使用它
ObjectGraph objectGraph = ObjectGraph.create(new SomeModule());
Foo foo = objectGraph.get(Foo.class);
看起來像你必須爲此創建供應商,一看便知到類似的問題http://stackoverflow.com/a/18105271/2807168 – leveluptor 2014-09-01 17:07:26