¿Hay alguna inversión de marcos de control para javascript?

La respuesta más cercana disponible en stackoverflow que pude encontrar está aquí: ¿Cuál es la forma correcta de conectar 2 objetos javascript? ?. Parece un gran comienzo, pero pensé que sería capaz de encontrar algo con un historial de desarrollo más largo.

Solo he usado Castle Windsor, y realmente lo extraño en tierra de clientes web.

16
Frank Schwieterman 15 sep. 2009 a las 08:11

12 respuestas

La mejor respuesta

Creé un contenedor de ioc ligero y simple, llamado JsfIoc.

http://github.com/fschwiet/JsfIoc

3
Frank Schwieterman 7 ago. 2010 a las 06:53

Prueba la infusión. Es un marco bastante potente de IoC JS. Es utilizado por un par de centros de investigación en las universidades de Toronto y Berkeley Infusion

La página de GitHub del proyecto con más información se puede encontrar aquí páginas de Infusion GitHub

-1
anvk 30 jun. 2016 a las 13:55

Pruebe canDI. Es una simple biblioteca de creación de objetos y inyección de dependencias. Puede crear singletons, instancias y variables que se registran automáticamente en la creación.

https://github.com/bflemi3/canDI

0
bflemi3 6 oct. 2015 a las 01:52

He creado un contenedor IoC para aplicaciones de JavaScript, échale un vistazo en http://blog.wolksoftware.com/introducing -inversifyjs

0
Remo H. Jansen 11 may. 2015 a las 15:20

Creamos un contenedor simple de JavaScript IoC llamado hilary.js: https://github.com/Acatar/hilaryjs.

Con hilary, puede registrarse y resolver servicios y fábricas. También es compatible con contenedores secundarios, si necesita o desea examinar sus contenedores.

EDITAR Agregué algunos ejemplos usando hilary, así como un ejemplo de lograr la inyección de dependencia con require.js:

0
andes 16 jul. 2014 a las 21:35

Otra opción (más nueva) es requireJS (http://requirejs.org/).

0
Frank Schwieterman 10 feb. 2012 a las 17:21

Puede ver esta biblioteca simple: fcjs Es muy pequeño pero puede ser poderoso para desacoplar su código. Está inspirado en el framework Swiz AS3

0
Szymon Wygnański 23 ene. 2012 a las 20:36

Yo uso uno, aquí hay un código simple de especificaciones (es CoffeeScript):

di.register 'a', -> 'component a'
di.get('a').should be: 'component a'

También hay devoluciones de llamada, diferentes ámbitos (aplicación, instancia, personalizado), capacidad para asignar componentes explícitamente.

DI: https://github.com/alexeypetrushin/rad_core/blob/master /assets/lib/dependency_injection.coffee

Especificaciones: https://github.com/alexeypetrushin/rad_core/blob/master /assets/lib_spec/dependency_injection_spec.coffee

Lo uso para ensamblar la aplicación Backbone.js, hay muchos objetos (Aplicación, Menú, Aviso, ...) y me facilita la vida.

ADVERTENCIA: Lo uso internamente con objetos nativos alterados, por lo que puede haber algunos errores :) Por favor, hágamelo saber, probablemente lo arregle en un día o dos (enviando a través de la página de problemas https://github.com/alexeypetrushin/rad_core/issues).

PD No me gusta el término IoC, es demasiado amplio, DI es una definición mucho más exacta.

0
Alexey Petrushin 22 nov. 2011 a las 19:36

En lenguajes de tipo dinámico como JavaScript y Ruby, DI no es realmente tan beneficioso.

El principal beneficio de DI en lenguajes tipados estáticamente como Java está en las pruebas, para reemplazar la implementación real de alguna clase con una simulación. Esto se debe a que en Java las clases son inmutables y no puede reemplazarlas fácilmente con simulacros: necesita un sistema DI completo para lograrlo.

Pero en JavaScript puede reemplazar fácilmente las clases / métodos existentes por otros simulados. Por lo tanto, DI no es realmente necesario para lograr la capacidad de prueba.

Por supuesto, hay otros escenarios en los que la DI podría ser útil, pero realmente no ha señalado para qué quiere usar la DI, por lo que cubrí el caso más obvio.

0
Rene Saarsoo 18 sep. 2009 a las 10:03

Echa un vistazo a http://philmander.github.com/inverted/, un contenedor de IOC Javascript repleto de funciones Yo he creado. Se ejecuta sobre AMD en el navegador y también funciona con Node.

Utilizado junto con AMD, Inverted usa un archivo de configuración separado para expresar cómo se instancian las clases y cómo interactúan. Una vez que se han definido estos valores predeterminados y relaciones, se puede crear un contexto de aplicación y se pueden usar instancias de las clases.

http://dailyjs.com/2013/01/04/controldeck-xlsx-inverted/

1
Phil Mander 14 ene. 2013 a las 10:12

Estaba buscando uno el año pasado y me encontré con squirrel-ioc. Había algo que no me gustó al respecto: creo que solo admitía instancias de estilo singleton.

Squirrel es un contenedor de IoC implementado en Javascript para promover el mejor uso de la arquitectura y los patrones en aplicaciones Javascript basadas en navegador

Comencé a escribir el mío y llegué bastante lejos (inyección de constructor y setter, valores y relaciones de referencia, soporte de singleton, pruebas de JsUnit), pero nunca lo necesité en mi aplicación. Puede que tenga que revisar el proyecto de Luke. Como referencia, aquí hay un ejemplo del formato de configuración con el que terminé.

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}
};
4
Kevin Hakanson 15 sep. 2009 a las 05:10

Empecé a escribir uno que nunca pude terminar. No estoy seguro si alguna vez lo haré, ya que los gastos generales probablemente no valen la pena. si está interesado, está en: http://code.google.com/p / jasproject / wiki / JasFac (esa es la parte de IoC, el conjunto completo está en http: //code.google.com/p/jasproject/)

La biblioteca de simulacros está bastante completa (sin expectativas, por el momento solo uso afirmaciones en los simulacros / stubs) pero falta el marco de prueba de la unidad. La parte de IoC está bastante completa pero puede tener algunos errores (aunque no lo creo)

Siéntase libre de usarlo y / o contribuir, puedo ayudarlo donde lo necesite.

EDITAR: Se puede ver más uso en las pruebas unitarias para jasfac: https: //jasproject.googlecode.com/svn/trunk/Jas.Tests/JasFacTests.js

4
Luke Schafer 15 sep. 2009 a las 04:27