Абстрактный класс для инъекций флаттера

#flutter #dependency-injection #injectable

Вопрос:

Я пытаюсь использовать инъекции для своего проекта, но когда я пробую эту часть кода:

 @injectable
abstract class TodoRepository {
  Future<Either<Failure, DayTodosEntity>> getDayDodo(DateEntity date);
}  
 

после run build_runner возникновения этой ошибки:

 [TodoRepository] is abstract and can not be registered directly! 
if it has a factory or a create method annotate it with @factoryMethod
 

не могу понять, чего мне не хватает.

Ответ №1:

@injectable декоратор отмечает класс, который будет обрабатываться пакетом di (инъекция зависимостей).

предполагается, что di предоставит вам экземпляр этого класса, когда вы попросите об этом позже. но вы также отметили класс как «абстрактный», а абстрактные классы не могут быть созданы.

Если у вас есть одна реализация для этой абстракции, вам нужно только добавить декоратора для реализации

 @Injectable(as: AbstractClass) 
class ConcreteClass implements AbstractClass {}
 

Если у вас несколько реализаций, вы можете достичь этого с помощью

 @Named("impl1")  
@Injectable(as: AbstractClass)  
class ConcreteClassImpl1 implements AbstractClass {}  
  
@Named("impl2")  
@Injectable(as: AbstractClass)  
class ConcreteClassImpl2 implements AbstractClass {} 
 

использование предполагаемой реализации

 @injectable  
class Consumer {  
   final AbstractClass abstractClass;  
    Consumer(@Named('impl1') this. abstractClass)  
}
 

Комментарии:

1. у меня также есть реализация для этого класса. не могли бы вы, пожалуйста, привести мне пример того, как связать их вместе?

2. конечно, если у вас есть одна реализация для этой абстракции: вам нужно только добавить декоратора для реализации « @Вводимый(как: абстрактный класс) класс ConcreteClass реализует абстрактный класс {} «