diff --git a/lib/block.dart b/lib/block.dart index 8d6610665..8f61e1c86 100644 --- a/lib/block.dart +++ b/lib/block.dart @@ -87,6 +87,7 @@ class Block implements ElementWrapper { if (directiveRefs == null || directiveRefs.length == 0) return parentInjector; var nodeModule = new Module(); var blockHoleFactory = () => null; + var blockFactory = () => null; var boundBlockFactory = () => null; var nodeAttrs = new NodeAttrs(node); @@ -118,11 +119,13 @@ class Block implements ElementWrapper { } nodeAttrs[ref.directive.$name] = ref.value; if (ref.directive.isStructural) { - blockHoleFactory = (Injector injector) => new BlockHole([node]); + blockHoleFactory = () => new BlockHole([node]); + blockFactory = () => ref.blockFactory; boundBlockFactory = (Injector injector) => ref.blockFactory.bind(injector); } }); nodeModule.factory(BlockHole, blockHoleFactory); + nodeModule.factory(BlockFactory, blockFactory); nodeModule.factory(BoundBlockFactory, boundBlockFactory); var nodeInjector = parentInjector.createChild([nodeModule]); directiveRefs.forEach((ref) => nodeInjector.get(ref.directive.type)); diff --git a/test/block_spec.dart b/test/block_spec.dart index 4104c942a..2a5b9e5c0 100644 --- a/test/block_spec.dart +++ b/test/block_spec.dart @@ -2,12 +2,20 @@ import "_specs.dart"; @NgDirective(transclude: true, selector: 'foo') class LoggerBlockDirective { - LoggerBlockDirective(BlockHole hole, BoundBlockFactory boundBlockFactory, Logger logger) { + LoggerBlockDirective(BlockHole hole, BlockFactory blockFactory, + BoundBlockFactory boundBlockFactory, Logger logger) { if (hole == null) { throw new ArgumentError('BlockHole must be injected.'); } + if (boundBlockFactory == null) { + throw new ArgumentError('BoundBlockFactory must be injected.'); + } + if (blockFactory == null) { + throw new ArgumentError('BlockFactory must be injected.'); + } logger.add(hole); logger.add(boundBlockFactory); + logger.add(blockFactory); } }