implemented toFactory3 method

This commit is contained in:
Sergey Penkovsky
2020-07-03 09:21:16 +03:00
parent c6021b0397
commit b641702e1e
2 changed files with 35 additions and 2 deletions

View File

@@ -79,8 +79,11 @@ class ResolvingContext<T> extends Resolver {
* Создать фабричный resolver с 3 зависимостями от контейнера
*/
ResolvingContext<T> toFactory3<T1, T2, T3>(T Function(T1, T2, T3) factory) {
// TODO: implement toFactory3
throw UnimplementedError();
Resolver<T> resolver = FactoryResolver<T>(() => factory(
_container.resolve<T1>(),
_container.resolve<T2>(),
_container.resolve<T3>()));
return toResolver(resolver);
}
/**

View File

@@ -161,6 +161,23 @@ void main() {
expect(container.resolve<DependOnAB>().a, a);
expect(container.resolve<DependOnAB>().b, b);
});
test("Bind to the factory resolves with 3 value", () {
final container = DiContainer();
final a = AA();
final b = BB();
final c = CC();
container.bind<A>().toValue(a);
container.bind<B>().toValue(b);
container.bind<C>().toValue(c);
container
.bind<DependOnABC>()
.toFactory3<A, B, C>((a, b, c) => DependOnABC(a, b, c));
expect(container.resolve<DependOnABC>().a, a);
expect(container.resolve<DependOnABC>().b, b);
expect(container.resolve<DependOnABC>().c, c);
});
}
ResolverMock<T> _makeResolver<T>(T expectedValue) {
@@ -179,6 +196,10 @@ abstract class B {}
class BB implements B {}
abstract class C {}
class CC implements C {}
class DependOnA {
final A a;
@@ -191,3 +212,12 @@ class DependOnAB {
DependOnAB(this.a, this.b) : assert(a != null && b != null);
}
class DependOnABC {
final A a;
final B b;
final C c;
DependOnABC(this.a, this.b, this.c)
: assert(a != null && b != null && c != null);
}