41 lines
1.6 KiB
C#

using SmallInjector;
using SmallInjectorDemo;
using SmallInjectorDemo.Interfaces;
using SmallInjectorDemo.Items;
IContainer container = new Container();
Console.WriteLine("Small dependency injection example");
container.RegisterType(true, container);
Console.WriteLine("Register " + nameof(SystemClock));
container.RegisterType<SystemClock, IClock>(true);
Console.WriteLine("Register " + nameof(ServiceOne));
container.RegisterType<ServiceOne, IServiceOne>(true);
Console.WriteLine("Register " + nameof(ServiceTwo));
container.RegisterType<ServiceTwo, IServiceTwo>(true);
Console.WriteLine("Register " + nameof(ServiceConsumer));
container.RegisterType<ServiceConsumer>(false);
container.RegisterType<ModuleA, IModule>(true);
container.RegisterType<ModuleB, IModule>(true);
container.RegisterType<ModuleC, IModule>(true);
Console.WriteLine();
Console.WriteLine("Check registrations:");
Console.WriteLine(nameof(IClock).PadRight(20) + container.IsRegistered<IClock>());
Console.WriteLine(nameof(IServiceOne).PadRight(20) + container.IsRegistered<IServiceOne>());
Console.WriteLine(nameof(IServiceTwo).PadRight(20) + container.IsRegistered<IServiceTwo>());
Console.WriteLine(nameof(ServiceConsumer).PadRight(20) + container.IsRegistered<ServiceConsumer>());
Console.WriteLine();
Console.WriteLine("Resolve class instances:");
var useful1 = container.Resolve<ServiceConsumer>();
var useful2 = container.Resolve<ServiceConsumer>();
var useful3 = container.Resolve<ServiceConsumer>();
Console.WriteLine();
Console.WriteLine("Run test methods:");
useful1.TestTheServices();
Console.WriteLine();
useful2.TestTheServices();
Console.WriteLine();
useful3.TestTheServices();