diff --git a/Helper.cs b/Helper.cs
new file mode 100644
index 0000000..f593229
--- /dev/null
+++ b/Helper.cs
@@ -0,0 +1,55 @@
+using System;
+using System.IO;
+using System.Runtime.CompilerServices;
+using System.Security.Cryptography;
+
+namespace SmallInjectorDemo
+{
+ ///
+ /// Static helper class for generating random numbers.
+ ///
+ public static class Helper
+ {
+ ///
+ /// Return cryptographic stable random integer.
+ ///
+ /// Lower border of result.
+ /// Upper border of result.
+ /// Random integer.
+ public static int NewRandomInteger(int min, int max)
+ {
+ // The random number provider.
+ using (var rand = new RNGCryptoServiceProvider())
+ {
+ var scale = uint.MaxValue;
+ while (scale == uint.MaxValue)
+ {
+ // Get four random bytes.
+ var four_bytes = new byte[4];
+ rand.GetBytes(four_bytes);
+
+ // Convert that into an uint.
+ scale = BitConverter.ToUInt32(four_bytes, 0);
+ }
+
+ // Add min to the scaled difference between max and min.
+ return (int) (min + (max - min) * (scale / (double) uint.MaxValue));
+
+ }
+ }
+
+
+ ///
+ /// Write method string.
+ ///
+ /// id of the object
+ /// member name
+ /// file path
+ ///
+ public static string WriteMethodString(int id, [CallerMemberName] string memberName = null, [CallerFilePath] string filepath = null)
+ {
+ var classname = Path.GetFileNameWithoutExtension(filepath);
+ return $"{classname}.{memberName?.TrimStart('.')}".PadRight(30) + $"Id: {id}";
+ }
+ }
+}
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
index b0e85b1..b62240a 100644
--- a/Program.cs
+++ b/Program.cs
@@ -6,28 +6,28 @@ namespace SmallInjectorDemo
{
private static void Main()
{
- Console.WriteLine("Small dependency injection example.");
- Console.WriteLine();
+ Console.WriteLine("Small dependency injection example");
var injector = new SmallInjector();
Console.WriteLine("Register " + nameof(ServiceOne));
injector.RegisterType(true);
Console.WriteLine("Register " + nameof(ServiceTwo));
injector.RegisterType(true);
- Console.WriteLine("Register " + nameof(UsefulClass));
- injector.RegisterType(false);
+ Console.WriteLine("Register " + nameof(ServiceConsumer));
+ injector.RegisterType(false);
Console.WriteLine();
- Console.WriteLine("Resolve class instances.");
- var useful1 = injector.Resolve();
- var useful2 = injector.Resolve();
- var useful3 = injector.Resolve();
- Console.WriteLine("Run test methods.");
+ Console.WriteLine("Resolve class instances:");
+ var useful1 = injector.Resolve();
+ var useful2 = injector.Resolve();
+ var useful3 = injector.Resolve();
+ Console.WriteLine();
+ Console.WriteLine("Run test methods:");
useful1.TestTheServices();
Console.WriteLine();
useful2.TestTheServices();
Console.WriteLine();
useful3.TestTheServices();
- //Console.ReadLine();
+ Console.ReadLine();
}
}
}
\ No newline at end of file
diff --git a/ServiceConsumer.cs b/ServiceConsumer.cs
new file mode 100644
index 0000000..a3aa47c
--- /dev/null
+++ b/ServiceConsumer.cs
@@ -0,0 +1,41 @@
+using System;
+
+namespace SmallInjectorDemo
+{
+ ///
+ /// A very useful class.
+ ///
+ public class ServiceConsumer
+ {
+ private readonly IServiceOne _service1;
+ private readonly IServiceTwo _service2;
+ private readonly int _id;
+
+ ///
+ /// Creates a new instance of .
+ ///
+ /// injected service one.
+ /// injected service two.
+ public ServiceConsumer(IServiceOne service1, IServiceTwo service2)
+ {
+ _service1 = service1;
+ _service2 = service2;
+ _id = Helper.NewRandomInteger(10, 99);
+ Console.WriteLine(Helper.WriteMethodString(_id));
+ }
+
+ ///
+ /// Test the injected services.
+ ///
+ public void TestTheServices()
+ {
+ Console.WriteLine(ToString());
+ Console.WriteLine(_service1.ToString());
+ Console.WriteLine(_service2.ToString());
+ }
+
+ ///
+ public override string ToString() => Helper.WriteMethodString(_id);
+
+ }
+}
\ No newline at end of file
diff --git a/ServiceOne.cs b/ServiceOne.cs
index 8ea7994..17ce417 100644
--- a/ServiceOne.cs
+++ b/ServiceOne.cs
@@ -2,25 +2,25 @@ using System;
namespace SmallInjectorDemo
{
+ ///
///
- /// Implementation of .
+ /// Implementation of .
///
public class ServiceOne : IServiceOne
{
- private const string MyName = nameof(ServiceOne);
- private readonly int _rand;
+ private readonly int _id;
///
/// Creates a new instance of .
///
public ServiceOne()
{
- _rand = RandomHelper.NewRandomInteger(10, 99);
- Console.WriteLine(MyName + ".ctor\t\tId: " + _rand);
+ _id = Helper.NewRandomInteger(10, 99);
+ Console.WriteLine(Helper.WriteMethodString(_id));
}
///
- public override string ToString() => MyName + ".ToString()\tId: " + _rand;
+ public override string ToString() => Helper.WriteMethodString(_id);
}
///
diff --git a/ServiceTwo.cs b/ServiceTwo.cs
index f2044e8..2200d8f 100644
--- a/ServiceTwo.cs
+++ b/ServiceTwo.cs
@@ -2,25 +2,25 @@ using System;
namespace SmallInjectorDemo
{
+ ///
///
- /// Implementation of .
+ /// Implementation of .
///
public class ServiceTwo : IServiceTwo
{
- private const string MyName = nameof(ServiceTwo);
- private readonly int _rand;
+ private readonly int _id;
///
/// Creates a new instance of .
///
public ServiceTwo()
{
- _rand = RandomHelper.NewRandomInteger(10, 99);
- Console.WriteLine(MyName + ".ctor\t\tId: " + _rand);
+ _id = Helper.NewRandomInteger(10, 99);
+ Console.WriteLine(Helper.WriteMethodString(_id));
}
///
- public override string ToString() => MyName + ".ToString()\tId: " + _rand;
+ public override string ToString() => Helper.WriteMethodString(_id);
}
///