A library to inject your dependencies via property wrappers
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
There are two separate steps when using DependencyInjection
Starting on version 1.0.0
DependencyInjection
makes use of Obj-C runtime to search the injection modules across the final module once the first injection is requested.
In order to declare your module you have to declare a class that conforms to ModuleContract
and call it Module
. Once this is done, DependencyInjection
will consider it when building the injection structure as explained before.
final class Module: ModuleContract {
static func get() {
instance(TypeAContract.self, TypeA.self)
shared(TypeBContract.self, TypeB.self)
global(TypeCContract.self, TypeC.self)
}
}
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
This library can be used on iOS, macOS, iPadOS, watchOS and tvOS as it only relies on Foundation framework
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.
- Contributions are very welcome.
- Attribution is appreciated (let's spread the word!), but not mandatory.
Alberto García – @AlbGarciam
DependencyInjection is available under the MIT license. See the LICENSE file for more info.