/// <summary> /// do the inject job /// </summary> /// <param name="inject">specific injection operation</param> /// <typeparam name="T">generic or non-generic <see cref="Injector"/></typeparam> /// <returns></returns> private static IServiceProvider configureServices <T>(Action <T> inject) where T : Injector { var typeFactory = new TypeFactory(); var creator = new InstanceCreator <T>(); foreach (var type in creator.GetInjectorImpTypes(typeFactory)) { if (creator.GetInstance(type, out var injector)) { inject(injector); } } return(Injector.Build()); }
public void GetInjectorImpTypes_Injector_1_ReturnsOneAndRightTypeInstance() { var stubTypeProvider = Substitute.For <ITypeProvider>(); stubTypeProvider.GetTypes().Returns(new List <Type>() { typeof(Injector_1) }); var typeFactory = new TypeFactory { _types = new Lazy <IEnumerable <Type> >((() => stubTypeProvider.GetTypes())) }; var creator = new InstanceCreator <Injector>(); var result = creator.GetInjectorImpTypes(typeFactory); Assert.NotZero(result.Count()); Assert.IsTrue(result.Count() == 1); Assert.IsTrue(result.First().FullName == typeof(Injector_1).FullName); }
public void GetInjectorImpTypes_NoImplication_ThrowsException() { var stubTypeProvider = Substitute.For <ITypeProvider>(); stubTypeProvider.GetTypes().Returns(new List <Type>() { typeof(InstanceCreatorTest) }); var typeFactory = new TypeFactory { _types = new Lazy <IEnumerable <Type> >((() => stubTypeProvider.GetTypes())) }; var creator = new InstanceCreator <Injector>(); Assert.Catch <NonImplicationException>(() => { creator.GetInjectorImpTypes(typeFactory); }, $"Can't find one implication of {typeof(Injector).Name}."); }