public Create_Dictionary() { var builder = new ContainerBuilder() .RegisterDefaultMicrosoftConfigurationTypes(); _creator = new AutofacInstanceCreator(builder.Build(), CultureInfo.InvariantCulture); }
/// <summary> /// inject /// </summary> /// <param name="services"></param> /// <param name="inject"></param> /// <typeparam name="T"></typeparam> public void Inject <T>(IServiceCollection services, Func <T, IServiceProvider> inject) where T : AutofacInjector { var creator = new AutofacInstanceCreator <T>(); if (!creator.GetInjectorImpTypes(_typeFactory, out var autofacInjector)) { return; } // get autofac provider var provider = inject(autofacInjector); var types = _typeFactory.GetTypes(); Parallel.ForEach(types, new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount }, type => { object obj = null; try { // get registered obj = provider.GetService(type); } catch (InvalidOperationException) // TODO: find a way that don't use a try-catch block. { } if (obj != null) // if registered { // register by Transient services.AddTransient(type, p => obj); } }); }
public void getAutofacInjector_NoImplications_ReturnsFalse() { var stubTypeProvider = Substitute.For <ITypeProvider>(); stubTypeProvider.GetTypes().Returns(new List <Type>() { }); var typeFactory = new TypeFactory(); typeFactory._types = new Lazy <IEnumerable <Type> >((() => stubTypeProvider.GetTypes())); var creator = new AutofacInstanceCreator <AutofacInjector>(); var result = creator.GetInjectorImpTypes(typeFactory, out AutofacInjector injector); Assert.False(result); }
public void getAutofacInjector_MultiImplications_ThrowsException() { var stubTypeProvider = Substitute.For <ITypeProvider>(); stubTypeProvider.GetTypes().Returns(new List <Type>() { Substitute.For <AutofacInjector>().GetType(), Substitute.For <AutofacInjector>().GetType() }); var typeFactory = new TypeFactory(); typeFactory._types = new Lazy <IEnumerable <Type> >((() => stubTypeProvider.GetTypes())); var creator = new AutofacInstanceCreator <AutofacInjector>(); Assert.Catch <MultiAutofacInjectorImplicationsException>(() => { creator.GetInjectorImpTypes(typeFactory, out AutofacInjector injector); }, $"There are more than one implication of {nameof(AutofacInjector)}"); }