เชิงมุมให้ตัวเลือกบริการเดี่ยว / โรงงานเท่านั้น วิธีหนึ่งคือการมีบริการจากโรงงานที่จะสร้างอินสแตนซ์ใหม่สำหรับคุณภายในคอนโทรลเลอร์หรืออินสแตนซ์สำหรับผู้บริโภคอื่น ๆ สิ่งเดียวที่ถูกฉีดเข้าไปคือคลาสที่สร้างอินสแตนซ์ใหม่ นี่เป็นสถานที่ที่ดีในการแทรกการอ้างอิงอื่น ๆ หรือเพื่อเริ่มต้นอ็อบเจ็กต์ใหม่ของคุณตามข้อกำหนดของผู้ใช้ (เพิ่มบริการหรือกำหนดค่า)
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);
}
}
คุณจะเห็นว่ามันให้โอกาสในการฉีดบริการเฉพาะบางอย่างที่ไม่มีในขั้นตอนจากโรงงาน คุณสามารถมีการฉีดเกิดขึ้นบนอินสแตนซ์โรงงานเพื่อใช้กับอินสแตนซ์ Model ทั้งหมดได้เสมอ
โปรดทราบว่าฉันต้องตัดโค้ดบางส่วนออกดังนั้นฉันอาจทำผิดบริบทบางอย่าง ... หากคุณต้องการตัวอย่างโค้ดที่ใช้งานได้โปรดแจ้งให้เราทราบ
ฉันเชื่อว่า NG2 จะมีตัวเลือกในการฉีดอินสแตนซ์ใหม่ของบริการของคุณในสถานที่ที่เหมาะสมใน DOM ของคุณดังนั้นคุณจึงไม่จำเป็นต้องสร้างโรงงานของคุณเอง จะต้องรอดู :)