From c6021b039752a1ef46daaf8843ea0b94ce006c0f Mon Sep 17 00:00:00 2001 From: Sergey Penkovsky Date: Fri, 3 Jul 2020 09:16:24 +0300 Subject: [PATCH] implemented toFactory2 method --- lib/resolvers/resolving_context.dart | 5 ++-- test/di_container_test.dart | 37 ++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/lib/resolvers/resolving_context.dart b/lib/resolvers/resolving_context.dart index 3680221..a1ace06 100644 --- a/lib/resolvers/resolving_context.dart +++ b/lib/resolvers/resolving_context.dart @@ -70,8 +70,9 @@ class ResolvingContext extends Resolver { * Создать фабричный resolver с 2 зависимостями от контейнера */ ResolvingContext toFactory2(T Function(T1, T2) factory) { - // TODO: implement toFactory2 - throw UnimplementedError(); + Resolver resolver = FactoryResolver( + () => factory(_container.resolve(), _container.resolve())); + return toResolver(resolver); } /** diff --git a/test/di_container_test.dart b/test/di_container_test.dart index 9231982..1d6d68c 100644 --- a/test/di_container_test.dart +++ b/test/di_container_test.dart @@ -135,19 +135,31 @@ void main() { test("Bind to the factory resolves with value", () { final container = DiContainer(); - final b = B(); - container.bind().toFactory(() => b); + final a = AA(); + container.bind().toFactory(() => a); - expect(container.resolve(), b); + expect(container.resolve(), a); }); test("Bind to the factory resolves with value", () { final container = DiContainer(); - final b = B(); - container.bind().toValue(b); + final a = AA(); + container.bind().toValue(a); container.bind().toFactory1((a) => DependOnA(a)); - expect(container.resolve().a, b); + expect(container.resolve().a, a); + }); + + test("Bind to the factory resolves with 2 value", () { + final container = DiContainer(); + final a = AA(); + final b = BB(); + container.bind().toValue(a); + container.bind().toValue(b); + container.bind().toFactory2((a, b) => DependOnAB(a, b)); + + expect(container.resolve().a, a); + expect(container.resolve().b, b); }); } @@ -161,10 +173,21 @@ class ResolverMock extends Mock implements Resolver {} abstract class A {} -class B implements A {} +class AA implements A {} + +abstract class B {} + +class BB implements B {} class DependOnA { final A a; DependOnA(this.a) : assert(a != null); } + +class DependOnAB { + final A a; + final B b; + + DependOnAB(this.a, this.b) : assert(a != null && b != null); +}