javascript控制框架是否有任何反转?
我能找到的stackoverflow上最接近的答案是:What is the right way to wire together 2 javascript objects?。这看起来是一个很好的开始,但我认为我能够找到具有更长发展历史的东西。
我自己只使用Castle Windsor,而且我真的很想念它在网络客户端。
答案 0 :(得分:4)
我开始写一篇我从来没有完成的作品。不确定我是否会因为开销可能不值得。如果您感兴趣,请访问:http://code.google.com/p/jasproject/wiki/JasFac(这是IoC部分,完整套件位于http://code.google.com/p/jasproject/)
模拟库相当完整(虽然目前我只是在模拟/存根上使用断言但没有期望)但缺乏单元测试框架。 IoC部分相当完整但可能有一些错误(尽管不这么认为)
随意使用和/或贡献,我可以在您需要的地方提供帮助。
编辑:在jasfac的单元测试中可以看到更多用法:https://jasproject.googlecode.com/svn/trunk/Jas.Tests/JasFacTests.js
答案 1 :(得分:4)
我去年正在寻找一个并跑过squirrel-ioc。有些东西我不喜欢它 - 我认为它只支持单例样式实例。
Squirrel是一个IoC容器 在Javascript中实现推广 更好地利用架构和 基于浏览器的Javascript中的模式 应用
我开始编写自己的东西并且相当远(构造函数和setter注入,值和引用关系,单例支持,JsUnit测试)但在我的应用程序中从未真正需要它。我可能要查看卢克的项目。作为参考,这是我最终得到的配置格式的一个例子。
var iocConfig = {
"a" : { Type : A },
"b1" : { Type : B, Props : [{Name : 'Letter', Ref : "a"}] },
"b2" : { Type : B, Props : [{Name : 'Letter', Val : "a"}] },
"c2" : { Type : C, Args : [{Ref : "a"}, {Val : "a"}] },
"d" : { Type : D, Props : [{Name : 'Letter', Ref : "a"}] },
"date" : { Type : Date, Props : [{Name : 'FullYear', Val : 2008}, {Name : 'Month', Val : 0}, {Name : 'Date', Val : 1}] },
"array3" : { Type : Array, Args : [{Val : 3}] },
"number1" : { Type : Number, Args : [{Val : 1}] },
"string1" : { Type : String, Args : [{Val : "1"}] },
"s-true" : { Type : S, Singleton : true},
"s-false" : { Type : S, Singleton : false}
};
答案 2 :(得分:3)
我把一个简单的轻量级ioc容器放在一起,称之为JsfIoc。
答案 3 :(得分:1)
查看Inverted http://philmander.github.com/inverted/,这是我创建的功能打包的Javascript IOC容器。它在浏览器中运行在AMD之上,也适用于Node。
与AMD一起使用时,Inverted使用单独的配置文件来表示如何实例化类以及它们如何交互。一旦定义了这些默认值和关系,就可以创建应用程序上下文,并且可以使用类的实例。
答案 4 :(得分:0)
在JavaScript和Ruby这样的动态类型语言中,DI并不是那么有用。
DI在Java等静态类型语言中的主要好处在于测试 - 用mock替换某些类的实际实现。那是因为在Java类中是不可变的,你不能只是用模拟轻松替换它们 - 你需要一个完整的DI系统来实现它。
但是在JavaScript中,您可以轻松地用模拟的类替换现有的类/方法。因此,实际上并不需要DI来实现可测试性。
当然还有其他可能有用的情况,但你还没有真正指出你想要使用DI的内容,所以我介绍了最明显的情况。
答案 5 :(得分:0)
我使用一个,这是来自specs的简单代码(它是CoffeeScript):
di.register 'a', -> 'component a'
di.get('a').should be: 'component a'
还有回调,不同的范围(应用程序,实例,自定义),显式分配组件的能力。
DI: https://github.com/alexeypetrushin/rad_core/blob/master/assets/lib/dependency_injection.coffee
我用它来组装Backbone.js应用程序,有很多对象(App,Menu,Notice,...),它让我的生活更轻松。
警告:我在内部使用已更改的本机对象,因此可能存在一些错误:)请让我知道它们,我可能会在一两天内修复它(通过问题页面https://github.com/alexeypetrushin/rad_core/issues提交)
P.S。不喜欢IoC术语它太宽泛,DI更精确的定义。
答案 6 :(得分:0)
您可以查看这个简单的库:fcjs 它非常小,但可以很强大地解耦代码。 它的灵感来自Swiz AS3框架
答案 7 :(得分:0)
另一个(更新的)选项是requireJS(http://requirejs.org/)。
答案 8 :(得分:0)
我们构建了一个名为hilary.js的简单JavaScript IoC容器:https://github.com/Acatar/hilaryjs。
有了希拉里,您可以注册并解决服务和工厂问题。如果您需要或想要对容器进行范围调整,它也支持子容器。
修改强> 我添加了一些examples using hilary,以及achieving Dependency Injection with require.js的示例:
答案 9 :(得分:0)
我已经为JavaScript应用创建了IoC容器,请在http://blog.wolksoftware.com/introducing-inversifyjs
查看答案 10 :(得分:0)
试试canDI。它是一个简单的依赖注入和对象创建库。您可以创建在创建时自动注册的单例,实例和变量。
答案 11 :(得分:-1)
尝试注入。它是一个非常强大的IoC JS框架。它被多伦多大学和伯克利大学的几个研究中心使用Infusion
找到包含更多信息的项目的GitHub页面