javascript - JavaScript/Knockout.js 中的依赖注入(inject)

标签 javascript knockout.js dependency-injection

我的编程经验主要是 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/

相关文章:

javascript - 如何同时滚动两个div?

javascript - 如何为默认 knockout 绑定(bind)创建包装函数

javascript - Knockout 检查的属性不能按预期工作

java - Jersey/HK2 - 通过带注释的注入(inject)将 HttpServletRequest 注入(inject) ContainerRequestFilter 内

javascript - 当表格单元格中的内容溢出时,水平滚动条不显示

javascript - 我可以获得对在 jQuery 插件中创建的对象的引用吗?

javascript - SocketIO 数据到 VueJS

javascript - Knockout.js ViewModel 更改回调?

c# - Ninject 依赖解析器

c# - 使用 DI 在 WPF 应用程序中使用 WCF 服务的正确方法