kątowy daje tylko pojedynczą usługę / opcję fabryczną. jednym ze sposobów jest posiadanie usługi fabrycznej, która utworzy dla Ciebie nową instancję wewnątrz kontrolera lub innych instancji konsumenckich. jedyną rzeczą, która jest wstrzykiwana, jest klasa, która tworzy nowe instancje. to jest dobre miejsce do wstrzyknięcia innych zależności lub zainicjowania nowego obiektu do specyfikacji użytkownika (dodanie usług lub konfiguracji)
namespace admin.factories {
'use strict';
export interface IModelFactory {
build($log: ng.ILogService, connection: string, collection: string, service: admin.services.ICollectionService): IModel;
}
class ModelFactory implements IModelFactory {
build($log: ng.ILogService, connection: string, collection: string, service: admin.services.ICollectionService): IModel {
return new Model($log, connection, collection, service);
}
}
export interface IModel {
}
class Model implements IModel {
constructor(
private $log: ng.ILogService,
private connection: string,
private collection: string,
service: admin.services.ICollectionService) {
};
}
angular.module('admin')
.service('admin.services.ModelFactory', ModelFactory);
}
następnie w instancji konsumenckiej potrzebujesz usługi fabrycznej i wywołaj metodę kompilacji w fabryce, aby uzyskać nową instancję, gdy jej potrzebujesz
class CollectionController {
public model: admin.factories.IModel;
static $inject = ['$log', '$routeParams', 'admin.services.Collection', 'admin.services.ModelFactory'];
constructor(
private $log: ng.ILogService,
$routeParams: ICollectionParams,
private service: admin.services.ICollectionService,
factory: admin.factories.IModelFactory) {
this.connection = $routeParams.connection;
this.collection = $routeParams.collection;
this.model = factory.build(this.$log, this.connection, this.collection, this.service);
}
}
widać, że zapewnia możliwość wstrzyknięcia określonych usług, które nie są dostępne na etapie fabrycznym. zawsze można wykonać wstrzyknięcie w instancji fabryki, która będzie używana przez wszystkie instancje modelu.
Uwaga Musiałem usunąć część kodu, więc mogłem popełnić błędy kontekstu ... jeśli potrzebujesz próbki kodu, który działa, daj mi znać.
Wierzę, że NG2 będzie miało możliwość wstrzyknięcia nowej instancji Twojej usługi we właściwe miejsce w Twoim DOM, więc nie musisz budować własnej implementacji fabrycznej. będę musiał poczekać i zobaczyć :)