2015-10-02 2 views
1

я создал демонстрационный проект Android Lib и используется крестик 2.0 со следующими шагами:Dagger 2: Нет реализация не генерироваться для интерфейса компонента

  1. Добавлены следующие банки в папке/ЛИЭС:

    кинжал-2.0.jar

    кинжал-составитель-2.0.jar

    кинжал-производители-2,0-beta.jar

    гуавы-18.0.jar

    javawriter-2.5.1.jar

    javax.annotation-апи-1.2.jar

    javax.inject-1.jar

  2. Проект -> Свойства -> Компилятор Java -> Обработка аннотаций (разрешенная обработка аннотаций)

  3. Проект -> P roperties -> Компилятор Java -> Обработка аннотаций - Путь к фабрике: добавлены все вышеупомянутые банки.

  4. Создано следующие классы:

    public class Car { 
    
        private Engine engine; 
    
        @Inject 
        public Car(Engine engine) { 
         this.engine = engine; 
        } 
    
        public String carDetails(){ 
         String engineName = this.engine.getName(); 
         int engineNumber = this.engine.getNumber(); 
    
         return "This car has the following details: \n" + engineName + "----" + engineNumber; 
        } 
    } 
    

    общедоступный интерфейс Engine {

     public String getName(); 
    
         public int getNumber(); 
    
        } 
    
    public class Toyota implements Engine{ 
    
        @Override 
        public String getName() { 
         return "This is toyota engine"; 
        } 
    
        @Override 
        public int getNumber() { 
         return 1234567890; 
        } 
    
    
    
    } 
    
    
    @Component(modules = EngineModule.class) 
    public interface EngineComponent { 
        void inject(); 
    } 
    
    @Module 
    public class EngineModule { 
    
        public EngineModule(DemoApplication demoApplication) { 
    
        } 
    
        @Provides 
        Engine provideEngine(){ 
         return new Toyota(); 
        } 
    } 
    

Но внутри /.apt-generated папки есть только два файла:

Car_Factory.java   EngineModule_ProvideEngineFactory.java 

DaggerEngineComponent.java не для меня, чтобы построить компонент.

Не могли бы вы помочь?

ответ

1

Я предполагаю, что обработчик аннотации сталкивается с ошибкой, и Eclipse не показывает вам журнал. Если у вас есть выход журнала в представлении «Вывод», вы можете вставить его в вопрос.

В частности, я думаю, что ошибка void inject(), которая не является форматом, указанным в @Component docs. Эти документы описывают три типа методов:

  • Беспараметрических фабричных методы, которые возвращают инъекционный типа Dagger создает и впрыскивает, как Engine createEngine() или
  • однопараметрических недействительных метод, которые получают экземпляр, созданный в другом месте и применить метод и поле например, void injectEngine(Engine) или Engine injectEngine(Engine).
  • Методы возврата подкомпонента, которые объединяют привязки компонента с данными из другого модуля.

Поскольку ваш void inject() не соответствует ни одному из этих форматов, Dagger, скорее всего erroring, и отказ от создания DaggerEngineComponent.

Смежные вопросы