Example #1
0
 it('should bind to an alias', function() {
   var injector = new Injector([Engine, bind(SportsCar).toClass(SportsCar), bind(Car).toAlias(SportsCar)]);
   var car = injector.get(Car);
   var sportsCar = injector.get(SportsCar);
   expect(car).toBeAnInstanceOf(SportsCar);
   expect(car).toBe(sportsCar);
 });
Example #2
0
 it("should create child injectors without default bindings", function() {
   var parent = new Injector([], {defaultBindings: true});
   var child = parent.createChild([]);
   var childCar = child.get(Car);
   var parentCar = parent.get(Car);
   expect(childCar).toBe(parentCar);
 });
Example #3
0
 it('should load instances from parent injector', function() {
   var parent = new Injector([Engine]);
   var child = parent.createChild([]);
   var engineFromParent = parent.get(Engine);
   var engineFromChild = child.get(Engine);
   expect(engineFromChild).toBe(engineFromParent);
 });
Example #4
0
  /**
   * Creates an `AppView` for the given component.
   *
   * Only either a component or a context needs to be specified but both can be provided for
   * advanced use cases (ie subclassing the context).
   *
   * @param {Type} component
   * @param {*} context
   * @param {string} html Use as the component template when specified (shortcut for
   * setInlineTemplate)
   * @return {Promise<ViewProxy>}
   */
  createView(component: Type,
             {context = null,
              html = null}: {context?: any, html?: string} = {}): Promise<ViewProxy> {
    if (isBlank(component) && isBlank(context)) {
      throw new BaseException('You must specified at least a component or a context');
    }

    if (isBlank(component)) {
      component = getTypeOf(context);
    } else if (isBlank(context)) {
      context = instantiateType(component);
    }

    if (isPresent(html)) {
      this.setInlineTemplate(component, html);
    }

    var doc = this._injector.get(DOCUMENT_TOKEN);
    var rootEl = el('<div id="root"></div>');
    DOM.appendChild(doc.body, rootEl);

    var componentBinding = bind(component).toValue(context);
    return this._injector.get(DynamicComponentLoader)
        .loadAsRoot(componentBinding, '#root', this._injector)
        .then((hostComponentRef) => { return new ViewProxy(hostComponentRef); });
  }
export function createInjector(zone: NgZone, bus: MessageBus): Injector {
  BrowserDomAdapter.makeCurrent();
  _rootBindings.push(bind(NgZone).toValue(zone));
  _rootBindings.push(bind(MessageBus).toValue(bus));
  var injector: Injector = Injector.resolveAndCreate(_rootBindings);
  return injector.resolveAndCreateChild(_injectorBindings());
}
Example #6
0
 it("should cache instance created lazily", function() {
   var injector = new Injector([Engine, CarWithLazyEngine]);
   var car = injector.get(CarWithLazyEngine);
   var e1 = car.engineFactory();
   var e2 = car.engineFactory();
   expect(e1).toBe(e2);
 });
Example #7
0
function _createAppInjector(appComponentType, bindings, zone) {
  if (isBlank(_rootInjector))
    _rootInjector = new Injector(_rootBindings);
  var mergedBindings = isPresent(bindings) ? ListWrapper.concat(_injectorBindings(appComponentType), bindings) : _injectorBindings(appComponentType);
  ListWrapper.push(mergedBindings, bind(VmTurnZone).toValue(zone));
  return _rootInjector.createChild(mergedBindings);
}
Example #8
0
 it('should instantiate an object after a failed attempt', function() {
   var isBroken = true;
   var injector = new Injector([Car, bind(Engine).toFactory(() => isBroken ? new BrokenEngine() : new Engine())]);
   expect(() => injector.get(Car)).toThrowError(new RegExp("Error"));
   isBroken = false;
   expect(injector.get(Car)).toBeAnInstanceOf(Car);
 });
Example #9
0
 it('should create new instance in a child injector', function() {
   var parent = new Injector([Engine]);
   var child = parent.createChild([bind(Engine).toClass(TurboEngine)]);
   var engineFromParent = parent.get(Engine);
   var engineFromChild = child.get(Engine);
   expect(engineFromParent).not.toBe(engineFromChild);
   expect(engineFromChild).toBeAnInstanceOf(TurboEngine);
 });
Example #10
0
 it('should return a promise when instantiating a sync binding ' + 'with an async dependency', inject([AsyncTestCompleter], (async) => {
   var injector = new Injector([bind(UserList).toAsyncFactory(fetchUsers), UserController]);
   injector.asyncGet(UserController).then(function(userController) {
     expect(userController).toBeAnInstanceOf(UserController);
     expect(userController.list).toBeAnInstanceOf(UserList);
     async.done();
   });
 }));