Принимая предложения о версиях 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.
Прошло время с тех пор, как я использовал Guice сейчас, но я помню нечто, называемое «вспомогательная инъекция». Он позволяет вам определить фабричный метод, в котором некоторые параметры предоставляются, а некоторые вводятся. Вместо внедрения процессора вы вводите фабрику процессоров, у которой есть фабричный метод, который принимает параметр anInputValue
.
Я указываю вам на javadoc FactoryProvider . Я считаю, что это должно быть вам полезно.
Требуется ли вашему процессору доступ к anInputValue
на протяжении всего жизненного цикла? Если нет, можно ли передать значение для вызова метода, который вы используете, например:
@Inject
public MyClass(Processor processor) {
this.processor = processor;
}
public boolean myMethod(String anInputValue) {
return processor.isEnabled(anInputValue);
}
Вы можете получить желаемый эффект, введя "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);
}