Как использовать Google Guice для создания объектов, которые требуют параметров?

Принимая предложения о версиях NuGet из ответов других. Я решил эту проблему, удалив .Data и Data.Entitiy.EF6, установленные Nuget.

Затем щелкните правой кнопкой мыши на References и найдите:

C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5\MySql.Data.dll и C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5\MySql.Data.Entity.EF6.dll

Затем я смог завершить работу мастера ADO.Net с моделями .edmx.

21
задан Daniel Schneller 15 June 2009 в 14:03
поделиться

3 ответа

Прошло время с тех пор, как я использовал Guice сейчас, но я помню нечто, называемое «вспомогательная инъекция». Он позволяет вам определить фабричный метод, в котором некоторые параметры предоставляются, а некоторые вводятся. Вместо внедрения процессора вы вводите фабрику процессоров, у которой есть фабричный метод, который принимает параметр anInputValue .

Я указываю вам на javadoc FactoryProvider . Я считаю, что это должно быть вам полезно.

27
ответ дан 29 November 2019 в 20:43
поделиться

Требуется ли вашему процессору доступ к anInputValue на протяжении всего жизненного цикла? Если нет, можно ли передать значение для вызова метода, который вы используете, например:

@Inject
public MyClass(Processor processor) {
    this.processor = processor;
}

public boolean myMethod(String anInputValue) {
    return processor.isEnabled(anInputValue);
}
2
ответ дан 29 November 2019 в 20:43
поделиться

Вы можете получить желаемый эффект, введя "Provider", который можно попросить во время выполнения предоставить вам процессор. Провайдеры предоставляют способ отложить создание объекта до тех пор, пока он не будет запрошен.

Они описаны в Guice Docs здесь и здесь .

Провайдер будет выглядеть примерно так.

public class ProcessorProvider implements Provider<Processor> {
    public Processor get() {
        // construct and return a Processor
    }
}

Поскольку провайдеры создаются и внедряются Guice, они сами могут иметь внедренные биты.

Ваш код будет выглядеть примерно так

@Inject
public MyClass(ProcessorProvider processorProvider) {
    this.processorProvider = processorProvider;
}

public boolean myMethod(String anInputValue) {
    return processorProvider.get().isEnabled(anInputValue);
}
10
ответ дан 29 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: