diff --git a/DependencyInjectionExample/DependencyExample.Core/DependencyExample.Core.csproj b/DependencyInjectionExample/DependencyExample.Core/DependencyExample.Core.csproj
new file mode 100644
index 0000000..9f5c4f4
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.Core/DependencyExample.Core.csproj
@@ -0,0 +1,7 @@
+
+
+
+ netstandard2.0
+
+
+
diff --git a/DependencyInjectionExample/DependencyExample.Core/Services.cs b/DependencyInjectionExample/DependencyExample.Core/Services.cs
new file mode 100644
index 0000000..860331b
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.Core/Services.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace DependencyExample
+{
+ public static class DependencyProvider
+ {
+ // This would be from the DI service
+ public static IFileManager FileManager { get; set; }
+ public static ILogger Logger { get; set; }
+ }
+
+ public interface IFileManager
+ {
+ void WriteFileData(string path, string data);
+
+ string GetFileData(string path);
+ }
+
+ public interface ILogger
+ {
+ void LogMessage(string message);
+ }
+}
diff --git a/DependencyInjectionExample/DependencyExample.FileManager/DependencyExample.FileManager.csproj b/DependencyInjectionExample/DependencyExample.FileManager/DependencyExample.FileManager.csproj
new file mode 100644
index 0000000..6fe14c7
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.FileManager/DependencyExample.FileManager.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
diff --git a/DependencyInjectionExample/DependencyExample.FileManager/WindowsFileManager.cs b/DependencyInjectionExample/DependencyExample.FileManager/WindowsFileManager.cs
new file mode 100644
index 0000000..9dddc99
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.FileManager/WindowsFileManager.cs
@@ -0,0 +1,20 @@
+using System;
+using System.IO;
+
+namespace DependencyExample
+{
+ public class WindowsFileManager : IFileManager
+ {
+ public string GetFileData(string path)
+ {
+ return File.ReadAllText(path);
+ }
+
+ public void WriteFileData(string path, string data)
+ {
+ DependencyProvider.Logger.LogMessage($"About to write `{data}` to `{path}`");
+
+ File.WriteAllText(path, data);
+ }
+ }
+}
diff --git a/DependencyInjectionExample/DependencyExample.Logger/DependencyExample.Logger.csproj b/DependencyInjectionExample/DependencyExample.Logger/DependencyExample.Logger.csproj
new file mode 100644
index 0000000..6fe14c7
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.Logger/DependencyExample.Logger.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
diff --git a/DependencyInjectionExample/DependencyExample.Logger/Logger.cs b/DependencyInjectionExample/DependencyExample.Logger/Logger.cs
new file mode 100644
index 0000000..d92f2cc
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.Logger/Logger.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace DependencyExample
+{
+ public class Logger : ILogger
+ {
+ public void LogMessage(string message)
+ {
+ Console.WriteLine("LOG: " + message);
+ }
+ }
+}
diff --git a/DependencyInjectionExample/DependencyExample.MemoryFileManager/DependencyExample.MockFileManager.csproj b/DependencyInjectionExample/DependencyExample.MemoryFileManager/DependencyExample.MockFileManager.csproj
new file mode 100644
index 0000000..6fe14c7
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.MemoryFileManager/DependencyExample.MockFileManager.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
diff --git a/DependencyInjectionExample/DependencyExample.MemoryFileManager/MockFileManager.cs b/DependencyInjectionExample/DependencyExample.MemoryFileManager/MockFileManager.cs
new file mode 100644
index 0000000..36faf41
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.MemoryFileManager/MockFileManager.cs
@@ -0,0 +1,26 @@
+using System;
+
+namespace DependencyExample
+{
+ public class MockFileManager : IFileManager
+ {
+ private string mData;
+
+ public bool FailOnPurpose { get; set; }
+
+ public string GetFileData(string path)
+ {
+ return mData;
+ }
+
+ public void WriteFileData(string path, string data)
+ {
+ DependencyProvider.Logger.LogMessage($"Mocking `{data}` to `{path}`, appending ` mock` to the end");
+
+ if (FailOnPurpose)
+ mData = $"{data} mock";
+ else
+ mData = data;
+ }
+ }
+}
diff --git a/DependencyInjectionExample/DependencyExample.sln b/DependencyInjectionExample/DependencyExample.sln
new file mode 100644
index 0000000..7dfe544
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample.sln
@@ -0,0 +1,49 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27703.2026
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyExample", "DependencyExample\DependencyExample.csproj", "{4E2E48F3-A142-41EA-B220-D0DB9A1F5B6A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyExample.Core", "DependencyExample.Core\DependencyExample.Core.csproj", "{E032293F-65C1-4679-B337-BED41E3F6CEE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyExample.FileManager", "DependencyExample.FileManager\DependencyExample.FileManager.csproj", "{4480631E-54CE-4443-9CA0-7F025D86710E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyExample.MockFileManager", "DependencyExample.MemoryFileManager\DependencyExample.MockFileManager.csproj", "{5500D49A-0299-4671-B0D2-AB280190280E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyExample.Logger", "DependencyExample.Logger\DependencyExample.Logger.csproj", "{9568AFCC-7D0E-4ACC-A575-520C5A77F311}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4E2E48F3-A142-41EA-B220-D0DB9A1F5B6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4E2E48F3-A142-41EA-B220-D0DB9A1F5B6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4E2E48F3-A142-41EA-B220-D0DB9A1F5B6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4E2E48F3-A142-41EA-B220-D0DB9A1F5B6A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E032293F-65C1-4679-B337-BED41E3F6CEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E032293F-65C1-4679-B337-BED41E3F6CEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E032293F-65C1-4679-B337-BED41E3F6CEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E032293F-65C1-4679-B337-BED41E3F6CEE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4480631E-54CE-4443-9CA0-7F025D86710E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4480631E-54CE-4443-9CA0-7F025D86710E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4480631E-54CE-4443-9CA0-7F025D86710E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4480631E-54CE-4443-9CA0-7F025D86710E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5500D49A-0299-4671-B0D2-AB280190280E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5500D49A-0299-4671-B0D2-AB280190280E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5500D49A-0299-4671-B0D2-AB280190280E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5500D49A-0299-4671-B0D2-AB280190280E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9568AFCC-7D0E-4ACC-A575-520C5A77F311}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9568AFCC-7D0E-4ACC-A575-520C5A77F311}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9568AFCC-7D0E-4ACC-A575-520C5A77F311}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9568AFCC-7D0E-4ACC-A575-520C5A77F311}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A96C376B-BF76-4B97-AC16-8B0C4DB26FBE}
+ EndGlobalSection
+EndGlobal
diff --git a/DependencyInjectionExample/DependencyExample/DependencyExample.csproj b/DependencyInjectionExample/DependencyExample/DependencyExample.csproj
new file mode 100644
index 0000000..95cadd4
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample/DependencyExample.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ netcoreapp2.0
+
+
+
+
+
+
+
+
+
+
diff --git a/DependencyInjectionExample/DependencyExample/Program.cs b/DependencyInjectionExample/DependencyExample/Program.cs
new file mode 100644
index 0000000..8b0b0b3
--- /dev/null
+++ b/DependencyInjectionExample/DependencyExample/Program.cs
@@ -0,0 +1,34 @@
+using System;
+
+namespace DependencyExample
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ Console.WriteLine("Hello World!");
+
+ // Inject specific services
+ DependencyProvider.FileManager = new MockFileManager { FailOnPurpose = true };
+ DependencyProvider.Logger = new Logger();
+
+ // Write some file, and read it back
+ var data = "this is my test";
+ var path = @"C:\Users\Luke\Desktop\test.txt";
+
+ // Log
+ DependencyProvider.Logger.LogMessage($"Writing `{data}` to `{path}`");
+
+ // Write
+ DependencyProvider.FileManager.WriteFileData(path, data);
+
+ // Read back
+ var readBack = DependencyProvider.FileManager.GetFileData(path);
+
+ // Log
+ DependencyProvider.Logger.LogMessage($"Read back `{readBack}`");
+
+ Console.Read();
+ }
+ }
+}
diff --git a/DependencyInjectionExample/Diagram 1.png b/DependencyInjectionExample/Diagram 1.png
new file mode 100644
index 0000000..1b9e1d3
Binary files /dev/null and b/DependencyInjectionExample/Diagram 1.png differ
diff --git a/DependencyInjectionExample/Diagram 2.png b/DependencyInjectionExample/Diagram 2.png
new file mode 100644
index 0000000..d55525d
Binary files /dev/null and b/DependencyInjectionExample/Diagram 2.png differ