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의 올바른 위치에 서비스의 새 인스턴스를 삽입 할 수있는 옵션이 있으므로 자체 공장 구현을 구축 할 필요가 없습니다. 기다려야 할 것입니다 :)