Tôi có câu hỏi DI Angular2. Giả sử tôi có số TestService
và tôi muốn sử dụng 2 phiên bản dịch vụ khác trong cùng một thành phần. Nếu tôi chỉ đơn giản là thêm một nhà cung cấp vào thành phần và tôi thêm 2 trường hợp vào hàm tạo, tôi kết thúc với cùng một cá thể dịch vụ. Ví dụ:Angular2 DI - khởi tạo nhiều phiên bản khác nhau trong cùng một hàm tạo
TestService
import {Injectable} from "@angular/core";
@Injectable()
export class TestService {
public id: number = Math.random();
public toString(): string {
return "Id: " + this.id;
}
}
Kiểm tra thành phần
import {Component, Input, OnInit} from "@angular/core";
import {TestService} from "../../services/test.service";
@Component({
providers: [TestService]
})
export class TestComponent implements OnInit {
constructor(private _testService1: TestService, private _testService2: TestService) { };
ngOnInit() {
console.log("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", this._testService1.toString());
console.log("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB", this._testService2.toString());
}
}
quả trong giao diện điều khiển
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Id: 0.24242492129168425
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB Id: 0.24242492129168425
Ai đó có thể cho tôi biết nếu có cách nào để sử dụng cơ chế DI của Angular2 để tiêm nhiều trường hợp khác nhau của một dịch vụ trong cùng một thành phần hoặc tôi chỉ cần thả DI cho trường hợp cụ thể này và tạo các cá thể của tôi theo cách thủ công với một hàm tạo thủ công?
Cảm ơn trước
Sẽ thú vị những gì downvote là cho. –
Nó chỉ đơn giản là không làm công việc. Nếu bạn tiêm với useFactory, nhà máy sẽ chỉ được sử dụng một lần để tiêm vào _testServiceFactory. Nhưng đoạn mã này sẽ không hoạt động được, vì bạn không có kiểu cho đối số hàm tạo, góc cạnh không thể biết cái gì cần tiêm. –
@TimKachko cảm ơn rất nhiều vì phản hồi quý giá của bạn! Tôi đã cập nhật câu trả lời của mình. Bạn nói đúng, về loại. Tôi đã thay đổi nó để sử dụng một khóa chuỗi thay vì với '@Inject()'. Nhà máy sẽ hoạt động. Có lẽ tôi có thể làm cho nó rõ ràng hơn trong mã, nhưng nhà máy là một hàm trả về một hàm, do đó DI sẽ giữ một thể hiện của hàm trả về và chuyển nó cho mỗi lớp mà tiêm ''testService'' và bởi vì một hàm được truyền cho hàm tạo trả về một 'new TestService()' mỗi khi nó được gọi, điều này sẽ làm việc. –