Внедрение зависимостей AngularDart - PullRequest
0 голосов
/ 15 февраля 2019

Я использую AngularDart и не могу понять, как внедрить мои зависимости точки входа.

Main.dart:

import 'package:angular/angular.dart';
import 'package:angular_dart/app_component.dart';
import 'package:angular_dart/app_component.template.dart' as ng;

@GenerateInjector(const [
  const Provider(MyRepository, useClass: ng.MyRepositoryImpl),
])
final InjectorFactory appInjector = ng.appInjector$Injector;

void main() {
  runApp(ng.AppComponentNgFactory, createInjector: appInjector);
}

app_component.dart

import 'package:angular/angular.dart';

@Component(
  selector: 'app-component',
  templateUrl: 'app_component.html',
  providers: [ClassProvider(MyRepository)]
)
class AppComponent {
  MyRepository myRepository; //This is not getting injected
}

abstract class MyRepository {
}

class MyRepositoryImpl implements MyRepository {
}

Мой вопрос касается метода runApp и ng.AppComponentNgFactory.Я не вижу, как разрешается инъекция.

Заранее спасибо,

РЕДАКТИРОВАТЬ: То, что я ищу, это как сказать компилятору генерировать строкукак:

new AppComponent(new MyRepositoryImpl);

и потреблять его как

class AppComponent{
final MyRepository _repo;

AppComponent(MyRepository repo) {
this._repo = repo;
}
}

1 Ответ

0 голосов
/ 15 февраля 2019

Используя [ClassProvider(MyRepository)] в вашем app_component, скажите компилятору переопределить то, что вы установили в main.dart файле.

Попробуйте:

@Component(
  selector: 'app-component',
  templateUrl: 'app_component.html',
)
@Injectable()
class AppComponent {
  final MyRepository _myRepository;

  AppComponent(this._myRepository);
}

РЕДАКТИРОВАТЬ:

Ваш файл main.dart неверен, вы должны ссылаться на инжектор из main.template.dart:

import 'package:angular/angular.dart';
import 'package:angular_dart/app_component.dart';
import 'package:angular_dart/app_component.template.dart' as ng;
import 'main.template.dart' as self;

@GenerateInjector([
  ClassProvider(MyRepository, useClass: ng.MyRepositoryImpl),
])
final InjectorFactory injector = self.injector$Injector;

void main() {
  runApp(ng.AppComponentNgFactory, createInjector: injector);
}
...