๐Ÿ’‰
DependencyInjection

A library to inject your dependencies via property wrappers

Github Swift Swift Package Manager codecov


๐ŸŒŸ
Features

DependencyInjection allows you to define the dependencies of your app. It exposes a property wrapper to make easier the injection in your instances. Every instance can be resolved at three different levels:

  • instance: Resolves a unique instance across the entire app
  • shared: Resolves the instance and allows it to be reused if it is needed on another object
  • global: The instance will act as a singleton


๐Ÿ—
Usage

There are two separate steps when using DependencyInjection

Register dependecies

let module: Module = {
    instance(TypeAContract.self, TypeA.self)
    shared(TypeBContract.self, TypeB.self)
    global(TypeCContract.self, TypeC.self)
}

startInjection {
    registerModules(module)
}

Injecting instance

To inject an instance you can just use the property wrapper:

protocol Definition: Injectable {}
class Implementation: Definition {}

@Injected var instance: Definition // It will be Implementation


๐Ÿ› 
Compatibility

This library can be used on iOS, macOS, iPadOS, watchOS and tvOS as it only relies on Foundation framework


โš™๏ธ
Installation

You can use the Swift Package Manager by declaring DependencyInjection as a dependency in your Package.swift file:

.package(url: "https://github.com/AlbGarciam/DependencyInjection", from: "0.1.0")

DependencyInjection exposes 2 versions of the library, a static and a dynamic version.


๐Ÿป
Etc.

  • Contributions are very welcome.
  • Attribution is appreciated (let’s spread the word!), but not mandatory.


๐Ÿ‘จโ€๐Ÿ’ป
Author

Alberto Garcรญa โ€“ @AlbGarciam


๐Ÿ‘ฎโ€โ™‚๏ธ
License

DependencyInjection is available under the MIT license. See the LICENSE file for more info.

GitHub

https://github.com/AlbGarciam/DependencyInjection