diff --git a/lib/resolvers/resolving_context.dart b/lib/resolvers/resolving_context.dart index 7647df6..6277481 100644 --- a/lib/resolvers/resolving_context.dart +++ b/lib/resolvers/resolving_context.dart @@ -91,8 +91,12 @@ class ResolvingContext extends Resolver { */ ResolvingContext toFactory4( T Function(T1, T2, T3, T4) factory) { - // TODO: implement toFactory4 - throw UnimplementedError(); + Resolver resolver = FactoryResolver(() => factory( + _container.resolve(), + _container.resolve(), + _container.resolve(), + _container.resolve())); + return toResolver(resolver); } /** diff --git a/test/di_container_test.dart b/test/di_container_test.dart index b40d36c..bdf00a2 100644 --- a/test/di_container_test.dart +++ b/test/di_container_test.dart @@ -178,6 +178,26 @@ void main() { expect(container.resolve().b, b); expect(container.resolve().c, c); }); + + test("Bind to the factory resolves with 4 value", () { + final container = DiContainer(); + final a = AA(); + final b = BB(); + final c = CC(); + final d = DD(); + container.bind().toValue(a); + container.bind().toValue(b); + container.bind().toValue(c); + container.bind().toValue(d); + container + .bind() + .toFactory4((a, b, c, d) => DependOnABCD(a, b, c, d)); + + expect(container.resolve().a, a); + expect(container.resolve().b, b); + expect(container.resolve().c, c); + expect(container.resolve().d, d); + }); } ResolverMock _makeResolver(T expectedValue) { @@ -200,6 +220,10 @@ abstract class C {} class CC implements C {} +abstract class D {} + +class DD implements D {} + class DependOnA { final A a; @@ -221,3 +245,13 @@ class DependOnABC { DependOnABC(this.a, this.b, this.c) : assert(a != null && b != null && c != null); } + +class DependOnABCD { + final A a; + final B b; + final C c; + final D d; + + DependOnABCD(this.a, this.b, this.c, this.d) + : assert(a != null && b != null && c != null && d != null); +}