implemented toFactory4 method

This commit is contained in:
Sergey Penkovsky
2020-07-03 09:25:56 +03:00
parent b641702e1e
commit aade90b4fa
2 changed files with 40 additions and 2 deletions

View File

@@ -91,8 +91,12 @@ class ResolvingContext<T> extends Resolver {
*/ */
ResolvingContext<T> toFactory4<T1, T2, T3, T4>( ResolvingContext<T> toFactory4<T1, T2, T3, T4>(
T Function(T1, T2, T3, T4) factory) { T Function(T1, T2, T3, T4) factory) {
// TODO: implement toFactory4 Resolver<T> resolver = FactoryResolver<T>(() => factory(
throw UnimplementedError(); _container.resolve<T1>(),
_container.resolve<T2>(),
_container.resolve<T3>(),
_container.resolve<T4>()));
return toResolver(resolver);
} }
/** /**

View File

@@ -178,6 +178,26 @@ void main() {
expect(container.resolve<DependOnABC>().b, b); expect(container.resolve<DependOnABC>().b, b);
expect(container.resolve<DependOnABC>().c, c); expect(container.resolve<DependOnABC>().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<A>().toValue(a);
container.bind<B>().toValue(b);
container.bind<C>().toValue(c);
container.bind<D>().toValue(d);
container
.bind<DependOnABCD>()
.toFactory4<A, B, C, D>((a, b, c, d) => DependOnABCD(a, b, c, d));
expect(container.resolve<DependOnABCD>().a, a);
expect(container.resolve<DependOnABCD>().b, b);
expect(container.resolve<DependOnABCD>().c, c);
expect(container.resolve<DependOnABCD>().d, d);
});
} }
ResolverMock<T> _makeResolver<T>(T expectedValue) { ResolverMock<T> _makeResolver<T>(T expectedValue) {
@@ -200,6 +220,10 @@ abstract class C {}
class CC implements C {} class CC implements C {}
abstract class D {}
class DD implements D {}
class DependOnA { class DependOnA {
final A a; final A a;
@@ -221,3 +245,13 @@ class DependOnABC {
DependOnABC(this.a, this.b, this.c) DependOnABC(this.a, this.b, this.c)
: assert(a != null && b != null && c != null); : 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);
}