it('should let me register a single object and get the same instance on each request', function() {
		var instanceCount = 0;
		function MyService() {
			++instanceCount;
		};

		var container = intravenous.create();
		var theOnlyInstance = new MyService()
		container.register('myService', theOnlyInstance);

		var instance2 = container.get('myService');
		expect(instance2).to.equal(theOnlyInstance);
		expect(instanceCount).to.equal(1);
	});
	it('should let me register a ctor function and get a new instance on each request', function() {
		var instanceCount = 0;
		function MyService() {
			++instanceCount;
		};

		var container = intravenous.create();
		container.register('myService', MyService, 'unique');

		var instance1 = container.get('myService');
		expect(instance1).to.be.instanceof(MyService);
		expect(instanceCount).to.equal(1);

		var instance2 = container.get('myService');
		expect(instance2).to.be.instanceof(MyService);
		expect(instanceCount).to.equal(2);
	});
	it('should let me register a ctor function as a singleton', function() {
		var instanceCount = 0;
		function MyService() {
			++instanceCount;
		};

		var container = intravenous.create();
		container.register('myService', MyService, 'singleton');

		var instance1 = container.get('myService');
		expect(instance1).to.be.instanceof(MyService);
		expect(instanceCount).to.equal(1);

		var instance2 = container.get('myService');
		expect(instance2).to.be.instanceof(MyService);
		expect(instanceCount).to.equal(1);
	});
module.exports = function(service, deps, dispose) {
	if(dispose !== undefined) {
		// Attach a disposal process
		service.prototype.dispose = dispose;
	}

	// Attach constructor arguments to the injector
	service.$inject = annotate(service);
	service.$inject.push('container');

	// Create the DIC
	var container = intravenous.create({
		onDispose: function(instance, key) {
			if (instance.dispose) instance.dispose();
		}
	});

	if(deps !== undefined) {
		// Define dependencies 
		for(var i in deps) {
			container.register(i, deps[i]);
		}
	}

	// Register the root parent
	container.register('_bulkheadService', service);

	return function() {
		var args = Array.prototype.slice.call(arguments, 0);

		if(args.length == service.length + 1) {
			// Found a injection object, overwrite container registrations
			var injection = args.pop();
			for(var i in injection) {
				container.register(i, injection[i]);
			}
		}

		for(var i = 0; i < args.length; i++) {
			// Overwrite container registration with constructor arguments
			container.register(service.$inject[i], args[i]);
		}

		return container.get('_bulkheadService');
	};
};
	it('should let me inject things', function() {
		function DAL(dbFilename) {
			this.dbFilename = dbFilename;
		};
		DAL.$inject = ['dbFilename'];

		function SL(dal) {
			this.dal = dal;
		};
		SL.$inject = ['dal'];

		var container = intravenous.create();
		container.register('dbFilename', 'my.db', 'singleton');
		container.register('dal', DAL, 'singleton');
		container.register('sl', SL, 'singleton');

		var sl = container.get('sl');
		expect(sl.dal.dbFilename).to.equal('my.db');
	});
//http://www.mariocasciaro.me/dependency-injection-in-node-js-and-other-architectural-patterns
//http://www.royjacobs.org/intravenous/

var http = require('http');
var path = require('path');

var express = require('express');
var router = express();
var server = http.createServer(router);

var intravenous = require('intravenous');
var civilized = require('./greeter/civilizedGreeter.js');
var pirate = require('./greeter/pirateGreeter.js');
var manager = require('./greeter/greetingManager.js');

var container = intravenous.create();
container.register("GreetingManager", manager);

router.use(express.static(path.resolve(__dirname, 'client')));

router.get("/hello", function(req, res){

	var name = req.query.name;
	
	container.register("name", name);
	container.register("greeter", civilized);
	
	var gm = container.get("GreetingManager");
	res.send(gm.salute());
});
Example #7
0
var intervenous	= require('intravenous')
,	webshop		= require('./classes')
,	common		= require('../commons/classes');

// Create IOC container
var container = intervenous.create();

// Register all classes
common.concat(webshop).forEach(function (item)
{
	var fullyQualifiedPath = item.path + '/' + item.name + '.js';

	console.log("Registering " + fullyQualifiedPath);
	container.register(item.name, require(fullyQualifiedPath), "singleton");
});

// Get the application
var app = container.get("App");

// Wire any non-wired classes
common.concat(webshop)
	.filter(function (item)
	{
		return item.auto;
	})
	.forEach(function (item)
	{
		container.get(item.name);
	});

// Start the main application