๐
DependencyInjection
A library to inject your dependencies via property wrappers
๐
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 appshared
: Resolves the instance and allows it to be reused if it is needed on another objectglobal
: 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.