我的编程经验主要是 PHP、JavaScript 和一点 Python。我经常看到“依赖注入(inject)”这个词,我也做了一些搜索,但我还是有点困惑。 This似乎是一个高评价的帖子,但我仍然不满意(或者我只是绝望)
接受的帖子使用的示例是....
public SomeClass (MyClass myObject) {
this.myObject = myObject;
}
我用过一些 knockout.js,我注意到设置对象值的类似场景。将参数从 ReservationsViewModel 传递到 SeatReservation 函数以设置对象是否被视为依赖注入(inject)?我评论了我想知道的两行。
function SeatReservation(name, initialMeal) {
var self = this;
self.name = name;
self.meal = ko.observable(initialMeal);
self.formattedPrice = ko.computed(function() {
var price = self.meal().price;
return price ? "$" + price.toFixed(2) : "None";
});
}
function ReservationsViewModel() {
var self = this;
self.availableMeals = [
{ mealName: "Standard (sandwich)", price: 0 },
{ mealName: "Premium (lobster)", price: 34.95 },
{ mealName: "Ultimate (whole zebra)", price: 290 }
];
self.seats = ko.observableArray([
//dependency injection?????
new SeatReservation("Steve", self.availableMeals[0]),
new SeatReservation("Bert", self.availableMeals[0])
]);
self.totalSurcharge = ko.computed(function() {
var total = 0;
for (var i = 0; i < self.seats().length; i++)
total += self.seats()[i].meal().price;
return total;
});
self.addSeat = function() {
//dependency injection?????
self.seats.push(new SeatReservation("", self.availableMeals[0]));
}
}
在将参数传递给 SeatReservation 函数以设置“新 SeatReservation”对象的数据时,它是否被视为依赖注入(inject)?
如果不是依赖注入(inject),是否有任何特定术语来描述这些对象的设置方式?
最佳答案
不,真正的 DI 需要控制反转,您应该在 ReservationsViewModel
中注入(inject) SeatReservation
类型
做
function ReservationsViewModel(seatReservation) {
...
self.seats = ko.observableArray([
new seatReservation("Steve", self.availableMeals[0]),
new seatReservation("Bert", self.availableMeals[0])
]);
}
会更正确。您还应该使用 AMD 来注入(inject)依赖项
关于javascript - JavaScript/Knockout.js 中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24726435/