jadi

ioc container

jadi Version : alpha

Any api will likely to be changed. It is still in a very early stage of its life : ), so there are lots of room to improve.

==========API=DOCs======================

Defined a class:

jadi.clazz("clazz.full.Name", function(arg1, arg2){
	//some fun details here
	return {
		collect : function(){
			if(this.sepcialName === "very sepcial"){
				//do some very sepcial thing
			}
		},
		sepcialName : undefined	
	};
});

Define a module: Example 1:

jadi.module("clazz.full",function(module){
	module.SomeClazz = function(name,arg2){
		return {
			method1 : function(){
				//some method detail
			}
		};
	};
	
	module.SomeOtherClazz = function(someObject){
		//some fun details here
		return {
			method2: function(){
				someObject.method1();
			}
		}
	};
});

Example 2: equivalent to example 1

jadi.module("clazz.full",function(){
	return {
		SomeClazz = function(name,arg2){
			return {
				method1 : function(){
					//some method detail
				}
			},
		SomeOtherClazz = function(someObject){
			//some fun details here
			return {
				method2: function(){
					someObject.method1();
				}
			}
	};	
});

declare beans, or wiring beans

jadi.declareBeans({
	id : "nameCollector",
	path : "clazz.full.Name",
	scope : "s",
	args : ["id:someObject","path:clazz.full.SomeOtherClazz"],
	property : {sepcialName: "not very special"}
},{
	id : "someObject",
	path : "clazz.full.SomeClazz",
	scope : "s",
	args : "path:clazz.full.SomeOtherClazz"
});

retrive bean in any scope

var nameCollector = jadi.getBean("nameCollector");

"new" up a object

jadi.newInstance("clazz.full.SomeOtherClazz");

scoped retrive

jadi.require(["nameCollector", "someObject"],
function(bean1, bean2){
	//bean1 is bean nameCollector
	//bean2 is bean someObjecct
});

=============node plugIN=====================

files ./Run.js ./resource.js ./src/foo.js

foo.js

exports.dispatcher = function(bar){
	
	return {
		listen : function(request, response){
			bar.up();
		}
	};
};

exports.bar = function(bor){
	var barCounter = 0;
	return {
		up : function(){
			barCounter++;
			console.log(this.sepcialName + " has counts: " + barCounter);
		}
	};
};

resource.js:

exports.beanDefinitions [
{
	dispatcher : true,
	path : "./src/foo@dispatcher"
},
{
	id : "bar",
	path : "./src/foo@bar",
	scope : "s",
	args : ["id:someObject","path:clazz.full.SomeOtherClazz"],
	property : {sepcialName: "not very special"}
}]

Run.js:

var jadi = require('jadi').newInstance()
var dispatcher = jadi.load(["./resource.js"]);
require("http").createServer(dispatcher.listen);