2013-02-11 4 views
3

У меня есть сомнения в использовании Guice. У меня есть класс, который я вызываю Main, который является конструктором, введенным с использованием Guice, и метод, который каждый раз, когда он вызывается, создает объект потока 0 класса AppThread. AppThread - частный класс внутри Main. Проблема в том, что внутри выполнения потока я хочу создать объект класса ClassX. Этот объект является конструктором, введенным с использованием Guice. Я не знаю, какая лучшая форма для ввода объектов ClassX. Моим первым решением является нагнетание Injector внутрь Main, а внутри резьбы инжектор вводить для инъекций объектов класса ClassX.Гибкий инжектор внутри резьбы

Существует ли более чистый подход для ввода зависимостей внутри резьбы?

Благодаря

ответ

3

Вместо того, чтобы иметь свой собственный подкласс Thread (который обескураженный в любом случае), вы должны написать свой «код нити», как обычный объект, который реализует Runnable. Ваш класс Main должен вводить этот класс (или вы можете фактически ввести Provider<MyRunnable>, если вам нужно создать неизвестное число из них). Тогда ваш класс Main может создать new Thread(myRunnable), и он должен хорошо сочетаться.

public class MyMainClass { 
    @Inject 
    MyMainClass(Provider<MyRunnable> runnableProvider) { ... } 

    public void spawnThread() { 
     new Thread(runnableProvider.get()).start(); 
    } 
} 

public class MyRunnable implements Runnable { 
    @Inject 
    MyRunnable(ClassX myX) { ... } 
    public void run() { 
     ... do work ... 
    } 
} 
+0

Согласитесь, но речь шла о создании экземпляров 'ClassA' внутри' Runnable'. Инъекция «Инжектор» в экземпляр «Runnable» или с использованием лучшего метода. –

+2

Да, использование провайдеров лучше, чем инжектор. Спасибо –

+0

@Andreas_D: вы должны стараться избегать инъекции «Инжектора», если можете. Да, есть моменты, когда вам нужно, но обычно вы можете просто ввести «Provider » вместо этого и передать его. Та же самая методология, которую я использую здесь, применяется в ряде случаев. –

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