This library is no longer being maintained. It is based upon the library continuation-local-storage, which does not work with promises. So I can't recommend using this anymore :(
Dependency injection for NodeJS inspired by Autofac (C# DI library)
Installation
npm install auto-node
Setup
let autonode = require('auto-node');
let app = express();
app.use(autonode.Middleware);
app.use((req, res, next) => {
let containerBuilder = new autonode.ContainerBuilder();
containerBuilder.registerType('UserRepository', UserRepository, autonode.LifetimeScope.InstancePerRequest);
autonode.Container.load(containerBuilder);
}
Basic Usage
let container = require('auto-node').Container;
class UserRepository {
constructor() {
this.logger = container.resolve('logger');
}
}
Registration
containerBuilder.register(key, instanceFunction, lifetimeScope);
containerBuilder.registerType(key, classType, lifetimeScope);
Lifetime Scopes
autonode.LifetimeScope.InstancePerRequest
autonode.LifetimeScope.SingleInstance
autonode.LifetimeScope.None
containerBuilder.register('lineItemRepository', () => new LineItemRepository(), autonode.LifetimeScope.InstancePerRequest);
containerBuilder.register('tripRepository', (c) => new TripRepository(c.resolve('lineItemRepository'), autonode.LifetimeScope.InstancePerRequest);
containerBuilder.registerType('lineItemRepository', LineItemRepository, autonode.LifetimeScope.InstancePerRequest);
conatienrBuilder.registerType('tripRepository', TripRepository, autonode.LifetimeScope.InstancePerRequest);
class TripRepository {
constructor(lineItemRepository) { // parameter name must match registration key
this.lineItemRepository = lineItemRepository;
}
}
class LineItemRepository {
constructor() { }
}
containerBuilder.register('request', () => req);
containerBuilder.register('requestAwareTripRepository', (c) => new TripRepository(c.resolve('request')));