Dependency Injection (DI) solution for Swift projects. It is inspired by JSR-330 and uses a property wrapper named @Inject to inject dependencies into properties of classes, structs, and protocols.
-
🔄 Support for both
prototype
andsingleton
scopes -
🏗️
Initialisable
protocol for classes with aninit
method -
💉
Injectable
protocol for objects conforming toInitialisable
-
🔗
WeakObjectWrapper
class for wrapping reference types as weak references -
🎁
Inject
struct for property wrapper, enabling dependency injection into properties -
🧠
Context
class for managing dependency registration and resolution -
🛠️
AssemblyBuilder
class for creating and configuring dependency assemblies
-
Import the
DependencyInjection
module in your project. -
Use the
@Inject
property wrapper on properties in your classes, structs, and protocols:
class MyClass {
@Inject var dependency: MyDependency
}
- Utilize the
AssemblyBuilder
to register dependencies and configure their scope:
let assembly = AssemblyBuilder.instance
.add(factory: { MyDependency() }, bindingName: "MyDependency", scope: .singleton)
.build()
- Use the
Context
class to register the assembly and resolve dependencies (e.g., in AppDelegate):
Context.instance.register(assembly)
This library requires Swift 5.3 or later.
Install DependencyInjection
using the Swift Package Manager by adding it as a dependency in your Package.swift
file or directly in your Xcode project.
This code is licensed under the MIT License.