Giter Club home page Giter Club logo

ioc.js's Introduction

IoC.JS

Inversion of control for JS version 1.0.1

Requirements:

License:

https://github.com/frank-hliva/IoC.js/blob/master/LICENSE.md

Examples:

import { inject, injectSetter, injectMethod, LifeTime, Kernel } from './IoC.js';

class KatanaRepository
{
    getData()
    {
        return  "cut!";
    }
}

@inject("KatanaRepository")
class Katana
{
    constructor(katanaRepository)
    {
        this._katanaRepository = katanaRepository;
    }

    hit()
    {
        return this._katanaRepository.getData();
    }
}

class Shuriken
{
    throw()
    {
        return "hit!";
    }
}

@inject("Katana", "Shuriken")
class Ninja
{
    constructor(katana, shuriken)
    {
        this._katana = katana;
        this._shuriken = shuriken;
    }

    @injectMethod("Katana", "Shuriken")
    someMethod(katana, shuriken)
    {
        console.log("method injection katana:", katana.hit());
        console.log("method injection shuriken:", shuriken.throw());
    }

    fight() { return this._katana.hit(); };
    sneak() { return this._shuriken.throw(); };

    @injectSetter("ninjaName")
    set name(name) { this._name = name }
    get name() { return this._name; }
}

let container = new Kernel();

container.register("Katana", Katana);
container.registerType(KatanaRepository);
container.register("Shuriken", Shuriken);
container.register("Ninja1", Ninja, LifeTime.singleton);
container.register("Ninja2", Ninja, LifeTime.perResolve);
container.register("Ninja3", Ninja, LifeTime.perResolve);
container.registerInstance("ninjaName", "Big boss");

let ninja1 = container.resolve("Ninja1");
console.log("Ninja1 name", ninja1.name);
console.log("Ninja1 fight", ninja1.fight());
console.log("Ninja1 sneak", ninja1.sneak());
container.resolve("Ninja1").name = "Don Corleone";
console.log("Ninja1 name", container.resolve("Ninja1").name); //singleton displays "Don Corleone"
console.log("------------------------------------------------");
container.resolve("Ninja2").name = "Al Capone";
console.log("Ninja2 name", container.resolve("Ninja2").name); //new instance displays "Big boss"
console.log("------------------------------------------------");

Custom factory:

//custom factory
container.factoryFor("Katana", ({ kernel, type, args }) =>
{
    console.log("Katana factory");
    return new type(kernel.resolve("KatanaRepository"));
});
let katana = container.resolve("Katana");
console.log(katana.hit());

ioc.js's People

Watchers

James Cloos avatar Frank Hliva (fr4nk21) avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.