diff --git a/MiniScanner.xcodeproj/project.pbxproj b/MiniScanner.xcodeproj/project.pbxproj
index 62636d0d8764c1370d4599804c3d35dd93639bfc..1acca28effaf8b1d89bcfe1434b9138194f24670 100644
--- a/MiniScanner.xcodeproj/project.pbxproj
+++ b/MiniScanner.xcodeproj/project.pbxproj
@@ -172,6 +172,10 @@
 		53F21FA12C1377B900172BFC /* Tajawal-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 53F21F9A2C1377B900172BFC /* Tajawal-Black.ttf */; };
 		672C46442C47B1F300497EF0 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 672C46432C47B1F300497EF0 /* Localizable.xcstrings */; };
 		672C464A2C47BD8800497EF0 /* String+StringKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46492C47BD8800497EF0 /* String+StringKeys.swift */; };
+		672C46622C47C74300497EF0 /* DependencyInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46612C47C74300497EF0 /* DependencyInjector.swift */; };
+		672C46642C47C74800497EF0 /* Provide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46632C47C74800497EF0 /* Provide.swift */; };
+		672C46662C47C74C00497EF0 /* Inject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46652C47C74C00497EF0 /* Inject.swift */; };
+		672C46682C47C75100497EF0 /* Clear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46672C47C75100497EF0 /* Clear.swift */; };
 		B827E5196CC419E773B843E1 /* Pods_MiniScanner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9A37DC9F9A8E3AF632DFB98 /* Pods_MiniScanner.framework */; };
 		EC0CF1FE254D8BBF00888722 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0CF1FD254D8BBF00888722 /* AppDelegate.swift */; };
 		EC0CF200254D8BBF00888722 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0CF1FF254D8BBF00888722 /* SceneDelegate.swift */; };
@@ -394,6 +398,10 @@
 		53F21F9A2C1377B900172BFC /* Tajawal-Black.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Tajawal-Black.ttf"; sourceTree = "<group>"; };
 		672C46432C47B1F300497EF0 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
 		672C46492C47BD8800497EF0 /* String+StringKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+StringKeys.swift"; sourceTree = "<group>"; };
+		672C46612C47C74300497EF0 /* DependencyInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DependencyInjector.swift; sourceTree = "<group>"; };
+		672C46632C47C74800497EF0 /* Provide.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Provide.swift; sourceTree = "<group>"; };
+		672C46652C47C74C00497EF0 /* Inject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Inject.swift; sourceTree = "<group>"; };
+		672C46672C47C75100497EF0 /* Clear.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Clear.swift; sourceTree = "<group>"; };
 		E8AF4FB39674DF589D719DCF /* Pods-MiniScanner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MiniScanner.release.xcconfig"; path = "Target Support Files/Pods-MiniScanner/Pods-MiniScanner.release.xcconfig"; sourceTree = "<group>"; };
 		E9A37DC9F9A8E3AF632DFB98 /* Pods_MiniScanner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MiniScanner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		EC0CF1FA254D8BBF00888722 /* MiniScanner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MiniScanner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -922,6 +930,17 @@
 			path = Localization;
 			sourceTree = "<group>";
 		};
+		672C46602C47C70F00497EF0 /* DependencyInjection */ = {
+			isa = PBXGroup;
+			children = (
+				672C46612C47C74300497EF0 /* DependencyInjector.swift */,
+				672C46632C47C74800497EF0 /* Provide.swift */,
+				672C46652C47C74C00497EF0 /* Inject.swift */,
+				672C46672C47C75100497EF0 /* Clear.swift */,
+			);
+			path = DependencyInjection;
+			sourceTree = "<group>";
+		};
 		98E49D3F46C8E62718825860 /* Pods */ = {
 			isa = PBXGroup;
 			children = (
@@ -952,6 +971,7 @@
 		EC0CF1FC254D8BBF00888722 /* MiniScanner */ = {
 			isa = PBXGroup;
 			children = (
+				672C46602C47C70F00497EF0 /* DependencyInjection */,
 				EC702548254E1F9F00BE1958 /* Managers */,
 				535983F02C144E79003EB6ED /* Helpers */,
 				EC8A9B0A254DC2FD00F9AF99 /* Extensions */,
@@ -1268,6 +1288,7 @@
 				539996922C27130000671340 /* ConstraintLayoutGuide.swift in Sources */,
 				539996A32C27130000671340 /* ConstraintLayoutSupportDSL.swift in Sources */,
 				53D9D1C52C1AF521004D1C1C /* MyExtention.swift in Sources */,
+				672C46662C47C74C00497EF0 /* Inject.swift in Sources */,
 				535983F22C144E87003EB6ED /* Keys.swift in Sources */,
 				539996962C27130000671340 /* ConstraintOffsetTarget.swift in Sources */,
 				EC70252C254E066400BE1958 /* SettingsViewController.swift in Sources */,
@@ -1281,6 +1302,7 @@
 				53014FAA2C11A8E80071CE39 /* Quadrilateral.swift in Sources */,
 				539996832C27130000671340 /* ConstraintMakerPriortizable.swift in Sources */,
 				5399969E2C27130000671340 /* Debugging.swift in Sources */,
+				672C46682C47C75100497EF0 /* Clear.swift in Sources */,
 				5399968E2C27130000671340 /* ConstraintMakerRelatable+Extensions.swift in Sources */,
 				539996512C26E86700671340 /* DefaultValues.m in Sources */,
 				53014FA42C11A8E80071CE39 /* EditScanViewController.swift in Sources */,
@@ -1301,6 +1323,7 @@
 				535983EF2C142C9F003EB6ED /* Localization.swift in Sources */,
 				539996892C27130000671340 /* ConstraintDSL.swift in Sources */,
 				539996952C27130000671340 /* ConstraintConstantTarget.swift in Sources */,
+				672C46622C47C74300497EF0 /* DependencyInjector.swift in Sources */,
 				539996902C27130000671340 /* UILayoutSupport+Extensions.swift in Sources */,
 				53014F992C11A8E80071CE39 /* CGPoint+Utils.swift in Sources */,
 				53E7D3392C1B00880025A1D3 /* FSPageViewLayout.swift in Sources */,
@@ -1318,6 +1341,7 @@
 				ECE9BBAA254E295900D45E43 /* Date+Extensions.swift in Sources */,
 				53014FA92C11A8E80071CE39 /* QuadrilateralView.swift in Sources */,
 				539996802C27130000671340 /* ConstraintMultiplierTarget.swift in Sources */,
+				672C46642C47C74800497EF0 /* Provide.swift in Sources */,
 				53CD5F562C1503150010424B /* BMViewController.swift in Sources */,
 				539996822C27130000671340 /* ConstraintDescription.swift in Sources */,
 				EC702546254E1E9E00BE1958 /* WalkthroughModel.swift in Sources */,
diff --git a/MiniScanner/DependencyInjection/Clear.swift b/MiniScanner/DependencyInjection/Clear.swift
new file mode 100644
index 0000000000000000000000000000000000000000..b0b6a0a4cc7059201c8cefa3d020823b95fdf9e0
--- /dev/null
+++ b/MiniScanner/DependencyInjection/Clear.swift
@@ -0,0 +1,19 @@
+//
+//  Clear.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 7/17/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+@propertyWrapper struct Clear<T> {
+    
+    var wrappedValue: T
+    
+    init() {
+        self.wrappedValue = DependencyInjector.resolve()
+        DependencyInjector.clear(dependency: wrappedValue)
+    }
+}
diff --git a/MiniScanner/DependencyInjection/DependencyInjector.swift b/MiniScanner/DependencyInjection/DependencyInjector.swift
new file mode 100644
index 0000000000000000000000000000000000000000..350a6a0a4b2b87911efdff530d4863a628825389
--- /dev/null
+++ b/MiniScanner/DependencyInjection/DependencyInjector.swift
@@ -0,0 +1,29 @@
+//
+//  DependencyInjector.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 7/17/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+struct DependencyInjector {
+    
+    private static var dependencyList: [String: Any] = [:]
+    
+    static func resolve<T>() -> T {
+        guard let t = dependencyList[String(describing: T.self)] as? T else {
+            fatalError("No provider registerd for type: \(T.self)")
+        }
+        return t
+    }
+    
+    static func register<T>(dependency: T) {
+        dependencyList[String(describing: T.self)] = dependency
+    }
+    
+    static func clear<T>(dependency: T) {
+        dependencyList.removeValue(forKey: String(describing: T.self))
+    }
+}
diff --git a/MiniScanner/DependencyInjection/Inject.swift b/MiniScanner/DependencyInjection/Inject.swift
new file mode 100644
index 0000000000000000000000000000000000000000..814c260196f925a6bc7831d1c2e1c08acfcd7ade
--- /dev/null
+++ b/MiniScanner/DependencyInjection/Inject.swift
@@ -0,0 +1,18 @@
+//
+//  Inject.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 7/17/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+@propertyWrapper struct Inject<T> {
+    
+    var wrappedValue: T
+    
+    init() {
+        self.wrappedValue = DependencyInjector.resolve()
+    }
+}
diff --git a/MiniScanner/DependencyInjection/Provide.swift b/MiniScanner/DependencyInjection/Provide.swift
new file mode 100644
index 0000000000000000000000000000000000000000..80046e2bd09dadcd75e333201adafc11e3db4bdc
--- /dev/null
+++ b/MiniScanner/DependencyInjection/Provide.swift
@@ -0,0 +1,19 @@
+//
+//  Provide.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 7/17/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+@propertyWrapper struct Provide<T> {
+    
+    var wrappedValue: T
+    
+    init(wrappedValue: T) {
+        self.wrappedValue = wrappedValue
+        DependencyInjector.register(dependency: wrappedValue)
+    }
+}