From b641702e1e860aaa29ae853056a5ab2dce3f8068 Mon Sep 17 00:00:00 2001 From: Sergey Penkovsky Date: Fri, 3 Jul 2020 09:21:16 +0300 Subject: [PATCH] implemented toFactory3 method --- lib/resolvers/resolving_context.dart | 7 +++++-- test/di_container_test.dart | 30 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/lib/resolvers/resolving_context.dart b/lib/resolvers/resolving_context.dart index a1ace06..7647df6 100644 --- a/lib/resolvers/resolving_context.dart +++ b/lib/resolvers/resolving_context.dart @@ -79,8 +79,11 @@ class ResolvingContext extends Resolver { * Создать фабричный resolver с 3 зависимостями от контейнера */ ResolvingContext toFactory3(T Function(T1, T2, T3) factory) { - // TODO: implement toFactory3 - throw UnimplementedError(); + Resolver resolver = FactoryResolver(() => factory( + _container.resolve(), + _container.resolve(), + _container.resolve())); + return toResolver(resolver); } /** diff --git a/test/di_container_test.dart b/test/di_container_test.dart index 1d6d68c..b40d36c 100644 --- a/test/di_container_test.dart +++ b/test/di_container_test.dart @@ -161,6 +161,23 @@ void main() { expect(container.resolve().a, a); expect(container.resolve().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().toValue(a); + container.bind().toValue(b); + container.bind().toValue(c); + container + .bind() + .toFactory3((a, b, c) => DependOnABC(a, b, c)); + + expect(container.resolve().a, a); + expect(container.resolve().b, b); + expect(container.resolve().c, c); + }); } ResolverMock _makeResolver(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); +}