angular предоставляет только одноэлементный сервис / заводскую опцию. один из способов - создать заводскую службу, которая создаст для вас новый экземпляр внутри вашего контроллера или других экземпляров-потребителей. единственное, что вводится, - это класс, создающий новые экземпляры. это хорошее место для внедрения других зависимостей или для инициализации вашего нового объекта в соответствии со спецификацией пользователя (добавление служб или конфигурации)
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);
}
тогда в вашем потребительском экземпляре вам понадобится сервис фабрики и вызовите метод сборки на фабрике, чтобы получить новый экземпляр, когда он вам нужен
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);
}
}
вы можете видеть, что он предоставляет возможность внедрить некоторые определенные службы, которые недоступны на заводском этапе. вы всегда можете выполнить инъекцию в экземпляр фабрики, который будет использоваться всеми экземплярами модели.
Обратите внимание, мне пришлось вырезать часть кода, чтобы я мог сделать некоторые контекстные ошибки ... если вам нужен образец кода, который работает, дайте мне знать.
Я считаю, что NG2 будет иметь возможность внедрить новый экземпляр вашего сервиса в нужное место в вашей DOM, чтобы вам не нужно было создавать собственную реализацию фабрики. придется подождать и посмотреть :)