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); } ///