2016-11-12 2 views
2

Я провожу несколько часов для поиска, но я до сих пор не находят ясно пример о Constructor Injection с Dagger 2.Dagger 2 - Отсутствие Конструктора примера Injection

Предположим, у меня есть ниже декларации, как я могу создать экземпляр класса B где-то с помощью инъекции кинжала 2?

@Module 
public class ClassA { 
    @Provides public ClassA provideA(){ 
     return new ClassA(); 
    } 
} 
public class ClassB{ 
    private ClassA a; 
    @Inject public ClassB(ClassA a){ 
     this.a = a; 
    } 
} 

ответ

3

Если у вас есть

@Module 
public class ModuleA { 
    /*unscoped*/ @Provides public ClassA provideA(){ 
     return new ClassA(); 
    } 
} 

/*unscoped*/ 
public class ClassB{ 
    private ClassA a; 

    @Inject public ClassB(ClassA a){ 
     this.a = a; 
    } 
} 

Тогда вам нужно

/*unscoped*/ 
@Component(modules={ModuleA.class}) 
public interface MyComponent { 
    ClassA classA(); 
    ClassB classB(); 
} 

И тогда вы можете доступ, как так

MyComponent component = DaggerMyComponent.create(); 
ClassB classB = component.classB(); 

Или

/*unscoped*/ 
@Component(modules={ModuleA.class}) 
public interface MyComponent { 
    ClassA classA(); 
    ClassB classB(); 

    void inject(MyClass myClass); 
} 

И

public class MyClass { 
    @Inject 
    ClassB classB; 

    public void init() { 
     MyComponent component = getComponent(); 
     component.inject(this); 
    } 
} 
Смежные вопросы