2014-06-26 13 views
5

bir Dagger modülü göz önünde bulundurun:traceback

@Module(library = true, complete = false) 
public static class Module { 
    @Provides 
    public Contextualized providesContextualized(Context ctx) { 
     return new Contextualized(ctx.getUsername()); 
    } 
    // ... and many more such provides. 
} 

Bağlam bir amacı bağlanabilir örn Modül yeterince uzun olduğunu düşünürsek

@Module(library = true, complete = false) 
public static class ContextModule { 
    private final String username; 
    public ContextModule(String username) { this.username = username; } 

    @Provides 
    public Context providesContext() { 
     return new Context() { 
      public String getUsername() { return username; } 
     }; 
    } 
} 

, ilk Modül için bir grafik oluşturmak için mantıklı görünüyor: Başlangıçta bilinen edilemez bir HTTP oturumu , ne zaman biri normalde grafiği yaratacak

ObjectGraph baseline = ObjectGraph.create(new Module()); 

ve daha sonra, tam grafik kılan eşsiz bir grafik oluşturmak için, belirli bir istek işlenme:

ObjectGraph withContext = baseline.plus(new ContextModule("killroy")); 

Ancak .plus() kalıtsal grafik eksiksiz olduğunu varsaymak görünüyor:

java.lang.IllegalStateException: Errors creating object graph: 
Context could not be bound with key Context required by class PlusExample$Module 
at dagger.internal.ThrowingErrorHandler.handleErrors(ThrowingErrorHandler.java:34) 
at dagger.internal.Linker.linkRequested(Linker.java:182) 
at dagger.internal.Linker.linkAll(Linker.java:109) 
at dagger.ObjectGraph$DaggerObjectGraph.linkEverything(ObjectGraph.java:244) 
at dagger.ObjectGraph$DaggerObjectGraph.plus(ObjectGraph.java:203) 
at PlusExample.plusFailsOnIncompleteModule(PlusExample.java:46) 

ne .plus yanlış mı() desteklemediğini bu hançermiş bir sınırlamadır? kullanicisini grafiğe gecirmenin baska kolay bir yolu var mi? (Her bir threadlocal ya bazı tür kullanıcıyı aramak zorunda kalacak Modülünde sağlamak eğer can sıkıcı olurdu.)

cevap

İlgili konular