A Simple and easy-to-use Dependency Injection solution for Swift
Dependency Injection
This package provides a simple and easy-to-use 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.
Features
- Support for both
prototype
andsingleton
scopes Initialisable
protocol for classes with aninit
methodInjectable
protocol for objects that conform toInitialisable
WeakObjectWrapper
class for wrapping reference types as weak referencesInject
struct for property wrapper, allowing for the injection of dependencies into propertiesContext
class for managing the registration and resolution of dependenciesAssemblyBuilder
class for creating and configuring anAssembly
of dependencies
Usage
-
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
}
- Use the
AssemblyBuilder
to register your dependencies and configure the scope.
let assembly = AssemblyBuilder.instance
.add(factory: { MyDependency() }, bindingName: "MyDependency", scope: .singleton)
.build()
- Use the
Context
class to register the assembly and resolve the dependencies (in AppDelegate for example)
Context.instance.register(assembly)
Compatibility
This library requires Swift 5.3 or later.
Installation
You can install DependencyInjection
using the Swift Package Manager by adding it as a dependency in your Package.swift
file or adding it to your Xcode project.
Contributing
I welcome contributions and suggestions for improvements to this library. If you find a bug or want to propose a new feature, please open an issue or submit a pull request.
Authors
- Denis Murphy
License
This code is licensed under the MIT License.