updated
This commit is contained in:
parent
e7ec2fc805
commit
1d2fca6ddc
55
Helper.cs
Normal file
55
Helper.cs
Normal file
@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace SmallInjectorDemo
|
||||
{
|
||||
/// <summary>
|
||||
/// Static helper class for generating random numbers.
|
||||
/// </summary>
|
||||
public static class Helper
|
||||
{
|
||||
/// <summary>
|
||||
/// Return cryptographic stable random integer.
|
||||
/// </summary>
|
||||
/// <param name="min">Lower border of result.</param>
|
||||
/// <param name="max">Upper border of result.</param>
|
||||
/// <returns>Random integer.</returns>
|
||||
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));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Write method string.
|
||||
/// </summary>
|
||||
/// <param name="id">id of the object</param>
|
||||
/// <param name="memberName">member name</param>
|
||||
/// <param name="filepath">file path</param>
|
||||
/// <returns></returns>
|
||||
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}";
|
||||
}
|
||||
}
|
||||
}
|
20
Program.cs
20
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<ServiceOne, IServiceOne>(true);
|
||||
Console.WriteLine("Register " + nameof(ServiceTwo));
|
||||
injector.RegisterType<ServiceTwo, IServiceTwo>(true);
|
||||
Console.WriteLine("Register " + nameof(UsefulClass));
|
||||
injector.RegisterType<UsefulClass>(false);
|
||||
Console.WriteLine("Register " + nameof(ServiceConsumer));
|
||||
injector.RegisterType<ServiceConsumer>(false);
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Resolve class instances.");
|
||||
var useful1 = injector.Resolve<UsefulClass>();
|
||||
var useful2 = injector.Resolve<UsefulClass>();
|
||||
var useful3 = injector.Resolve<UsefulClass>();
|
||||
Console.WriteLine("Run test methods.");
|
||||
Console.WriteLine("Resolve class instances:");
|
||||
var useful1 = injector.Resolve<ServiceConsumer>();
|
||||
var useful2 = injector.Resolve<ServiceConsumer>();
|
||||
var useful3 = injector.Resolve<ServiceConsumer>();
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Run test methods:");
|
||||
useful1.TestTheServices();
|
||||
Console.WriteLine();
|
||||
useful2.TestTheServices();
|
||||
Console.WriteLine();
|
||||
useful3.TestTheServices();
|
||||
//Console.ReadLine();
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
}
|
41
ServiceConsumer.cs
Normal file
41
ServiceConsumer.cs
Normal file
@ -0,0 +1,41 @@
|
||||
using System;
|
||||
|
||||
namespace SmallInjectorDemo
|
||||
{
|
||||
/// <summary>
|
||||
/// A very useful class.
|
||||
/// </summary>
|
||||
public class ServiceConsumer
|
||||
{
|
||||
private readonly IServiceOne _service1;
|
||||
private readonly IServiceTwo _service2;
|
||||
private readonly int _id;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="ServiceConsumer"/>.
|
||||
/// </summary>
|
||||
/// <param name="service1">injected service one.</param>
|
||||
/// <param name="service2">injected service two.</param>
|
||||
public ServiceConsumer(IServiceOne service1, IServiceTwo service2)
|
||||
{
|
||||
_service1 = service1;
|
||||
_service2 = service2;
|
||||
_id = Helper.NewRandomInteger(10, 99);
|
||||
Console.WriteLine(Helper.WriteMethodString(_id));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test the injected services.
|
||||
/// </summary>
|
||||
public void TestTheServices()
|
||||
{
|
||||
Console.WriteLine(ToString());
|
||||
Console.WriteLine(_service1.ToString());
|
||||
Console.WriteLine(_service2.ToString());
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString() => Helper.WriteMethodString(_id);
|
||||
|
||||
}
|
||||
}
|
@ -2,25 +2,25 @@ using System;
|
||||
|
||||
namespace SmallInjectorDemo
|
||||
{
|
||||
/// <inheritdoc />
|
||||
/// <summary>
|
||||
/// Implementation of <see cref="IServiceOne"/>.
|
||||
/// Implementation of <see cref="T:SmallInjectorDemo.IServiceOne" />.
|
||||
/// </summary>
|
||||
public class ServiceOne : IServiceOne
|
||||
{
|
||||
private const string MyName = nameof(ServiceOne);
|
||||
private readonly int _rand;
|
||||
private readonly int _id;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="ServiceOne"/>.
|
||||
/// </summary>
|
||||
public ServiceOne()
|
||||
{
|
||||
_rand = RandomHelper.NewRandomInteger(10, 99);
|
||||
Console.WriteLine(MyName + ".ctor\t\tId: " + _rand);
|
||||
_id = Helper.NewRandomInteger(10, 99);
|
||||
Console.WriteLine(Helper.WriteMethodString(_id));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString() => MyName + ".ToString()\tId: " + _rand;
|
||||
public override string ToString() => Helper.WriteMethodString(_id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -2,25 +2,25 @@ using System;
|
||||
|
||||
namespace SmallInjectorDemo
|
||||
{
|
||||
/// <inheritdoc />
|
||||
/// <summary>
|
||||
/// Implementation of <see cref="IServiceTwo"/>.
|
||||
/// Implementation of <see cref="T:SmallInjectorDemo.IServiceTwo" />.
|
||||
/// </summary>
|
||||
public class ServiceTwo : IServiceTwo
|
||||
{
|
||||
private const string MyName = nameof(ServiceTwo);
|
||||
private readonly int _rand;
|
||||
private readonly int _id;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of <see cref="ServiceTwo"/>.
|
||||
/// </summary>
|
||||
public ServiceTwo()
|
||||
{
|
||||
_rand = RandomHelper.NewRandomInteger(10, 99);
|
||||
Console.WriteLine(MyName + ".ctor\t\tId: " + _rand);
|
||||
_id = Helper.NewRandomInteger(10, 99);
|
||||
Console.WriteLine(Helper.WriteMethodString(_id));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString() => MyName + ".ToString()\tId: " + _rand;
|
||||
public override string ToString() => Helper.WriteMethodString(_id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
Loading…
x
Reference in New Issue
Block a user