Code Monkey home page Code Monkey logo

sherlock-struct-autowire's Introduction

Sherlock - Google Wire Dependency Injection Struct Auto Discovery

Install

go get github.com/alfiankan/sherlock-struct-autowire

Comparison

Manual Dependency Injection

func InitializeCar(pertalite example.Pertalite, body example.Body) example.Car {
	gas := example.Gas{
		GasOil: pertalite,
	}
	oil := example.Oil{}
	engine := example.Engine{
		Gas: gas,
		Oil: oil,
	}
	car := example.Car{
		Engine: engine,
		Body:   body,
	}
	return car
}

func InitializeEngine(int64_2 int64) example.Engine {
	pertalite := example.Pertalite{
		Barrel: int64_2,
	}
	gas := example.Gas{
		GasOil: pertalite,
	}
	oil := example.Oil{}
	engine := example.Engine{
		Gas: gas,
		Oil: oil,
	}
	return engine
}

func InitializeBody() example.Body {
	body := example.Body{}
	return body
}

Google Wire

func InitializeCar(pertalite example.Pertalite, body example.Body) example.Car {
	wire.Build(
		wire.Struct(new(example.Car), "*"),
		wire.Struct(new(example.Engine), "*"),
		wire.Struct(new(example.Gas), "*"),
		wire.Struct(new(example.Oil), "*"),
	)
	return example.Car{}
}

func InitializeEngine(int64 int64) example.Engine {
	wire.Build(
		wire.Struct(new(example.Engine), "*"),
		wire.Struct(new(example.Gas), "*"),
		wire.Struct(new(example.Pertalite), "*"),
		wire.Struct(new(example.Oil), "*"),
	)
	return example.Engine{}
}

Google Wire with sherlock

	sherlock.New().
		SetPkgName("tests").
		Add(example.Car{}, customBody).
		Add(example.Engine{}).
		Add(example.Body{}).
		SetGlobalInject(config).
		Gen()

Create Dependency

	sherlock.New(). // new sherlock
		SetPkgName("tests"). // set pkg name, is main by default
		Add(example.Car{}, customBody). // add auto wiring deps
		Add(example.Engine{}). // add auto wiring deps
		Add(example.Body{}). // add auto wiring deps
		SetGlobalInject(config). // set global overrider, injector, provider
		Gen()

Create Simple Deps

    sherlock.New().Add(example.Car{})

sherlock willinspect required struct field recursively

Create Simple Deps with override

    sherlock.New().Add(example.Car{})

sherlock willinspect required struct field recursively, in case we need to override some dependencies jut add variadic object next to first deps.

    pertalite := Pertalite{Barel: 5000}
    sherlock.New().Add(example.Car{}, pertalite)

Create Simple Deps with global override

    pertalite := Pertalite{Barel: 5000}
    sherlock.New().
        Add(example.Car{}).
        Add(example.Engine{}).
        SetGlobalInject(pertalite).

Global inject will inject to all dependecies

How To Install

Example

sherlock-struct-autowire's People

Contributors

alfiankan avatar

Watchers

 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.