Coder Social home page Coder Social logo

component's Introduction

Component

Dependency Injection for golang.

Inspired by stuartsierra/component. It is hardly be as elegant as in Clojure though.

It is type unsafe and I don't know how it could be fixed with current golang state.

Usage

package main

import github.com/fl00r/component
// imaginable postgresql driver
import pg

type Database {
  host string
  port int
  database string
  connection *pg.connection
}

type Scheduler {
  threadPoolSize int
}

type App {
  logLevel string
}

func NewDatabase(args ...interface{}) component.Lifecicle {
  return &Database{
    host: args[0].(string),
    port: args[1].(int),
    database: args[2].(string),
  }
}

func (d *Database) Start(dependencies ...interface{}) error {
  d.connection, err := pg.Connect(d.host, d.port, d.database)
  return err
}

func (d *Database) Stop() error {
  err := d.connection.Close()
  d.connection = nil
  return err
}

// ...
// same for Scheduler and App types
//

func main() {
  system = component.New()

  system.
    NewComponent("database").
    Constructor(NewDatabase).
    Args("localhost", 5432, "dev_database")

  system.
    NewComponent("scheduler").
    Constructor(NewScheduler).
    Args(12).
    Dependencies("database")

  system.
    NewComponent("app").
    Constructor(NewApp).
    Args("Error").
    Dependencies("database", "scheduler")

  system.Start()

  defer system.Stop()
}

component's People

Contributors

fl00r avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  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.