我正在R7.plot(T)
和AngularDart
编写一个共享公共代码的项目。我有flutter
,它将处理大多数组件中使用的所有逻辑业务代码:
AppController
现在我在写class AppController {
AppController(this.serviceOne, this.serviceTwo...);
}
。我有两个选择:
代码1.1:
AngularDart
代码1.2:
bootstrap(AppComponent, [
new Provider(
AppController,
useValue: new AppController(
new ServiceA(),
new ServiceB(),
....
),
),
]);
代码1.3:
bootstrap(AppComponent, [
AppController,
ServiceA,
ServiceB,
]);
// From Günter Zöchbauer's answer
createAppFactory(ServiceA sa, ServiceB sb) => new AppController(sa, sb);
bootstrap(AppComponent, [
new Provider<AppController>(
useFactory: createAppFactory,
deps: [ServiceA, ServiceB]
),
]);
。这很简单,但看起来并不优雅。@input
我也在想,如果我们使用appController来处理业务逻辑层,并让平台代码只实现小部件。服务在公共代码中定义。我可以在appController中创建服务,不要让平台代码触摸它。换句话说,平台代码仅通过appController使用公共代码,服务在appController内部创建。
答案 0 :(得分:0)
如果添加@Injectable()
注释,则不能再使用Flutter中的代码,因为它通过Angular将代码绑定到dart:html
。
您需要在不使用@Injectable()
的情况下创建服务,然后使用注释为Angular添加包装。
shared_code/lib/foo_service.dart
中的
class FooService {
BarService bar;
FooService(this.bar);
}
angular_code/lib/foo_service.dart
中的
import 'package:shared_code/foo_service.dart' as shared;
@Injectable()
class FooService extends shared.FooService {
FooService(BarService bar) : super(bar);
}
我想我看到它提到Angular团队正在讨论他们是否可以摆脱@Injectable()
。这会使这更容易。
另一种方法是使用工厂提供商不需要@Injectable()
FooService createFooService(BarService bar) => new FooService(bar);
FooService createBarService() => new BarService();
providers: const [
const FactoryProvider(FooService, createFooService, deps: const [BarService]),
const FactoryProvider(BarService, createBarService)]