roboguice, как внедрить пользовательский класс

Привет, я в настоящее время использую roboguice, как мы знаем, мы можем использовать аннотацию, чтобы ввести класс, такой как

@InjectView(R.id.list)ListView x

нотация @inject работает, потому что я расширяю RoboActivity или любой класс Robo

мой вопрос, если я хочу внедрить пользовательский класс, называемый

public class CustomUtilManager {
}

я хочу быть в состоянии ввести его, скажем, RoboActivity

@Inject CustomUtilMananger

как мне это сделать?

Мой второй вопрос, если у меня есть класс, это не подкласс любого класса Robo *

сказать

public class MyOwnClass {
}

как получить инжектор и внедрить другой класс для инъекций, например CustomUtilManager

то есть как я могу сказать

public class MyOwnClass {
    @Inject CustomUtilManager customUtilManager;
}

Ответы на вопрос(1)

Решение Вопроса
Инъекция пользовательского класса в RoboActivity

@Inject аннотации, но введенный класс должен удовлетворятьодин из следующих условий:

У пользовательского класса есть конструктор по умолчанию (без аргумента)Пользовательский класс имеетодин Введенный конструктор.Пользовательский класс имеетпоставщик которые обрабатывают экземпляр (более сложный)

Очевидно, что самый простой способ - использовать конструктор по умолчанию. Если у вас должны быть аргументы в вашем конструкторе, он должен быть вставлен:

public class CustomClass {

    @Inject
    public CustomClass(Context context, Other other) {
        ...
    }

}

Обратите внимание на@Inject аннотация на конструкторе. Класс каждого аргумента также должен быть внедрен RoboGuice. Несколько инъекций для классов Android предоставляются RoboGuice "из коробки" (например,Context).Инъекции, предоставленные RoboGuice

впрыскиваниевнутри пользовательский класс

Если вы создаете экземпляр своего пользовательского класса с RoboGuice (например, с@Inject аннотации), все поля отмечены@Inject будет введен автоматически.

Если вы хотите использоватьnew CustomClass(), вы'придется делать укол самостоятельно:

public class CustomClass {

    @Inject
    Other other;

    Foo foo;

    public CustomClass(Context context) {
        final RoboInjector injector = RoboGuice.getInjector(context);

        // This will inject all fields marked with the @Inject annotation
        injector.injectMembersWithoutViews(this);

        // This will create an instance of Foo
        foo = injector.getInstance(Foo.class);
    }

}

Обратите внимание, что вы должны пройтиContext чтобы ваш конструктор смог получить инжектор.

 user123358729 июн. 2013 г., 23:36
спасибо большое, Никопико

Ваш ответ на вопрос