public Create_Dictionary()
        {
            var builder = new ContainerBuilder()
                          .RegisterDefaultMicrosoftConfigurationTypes();

            _creator = new AutofacInstanceCreator(builder.Build(), CultureInfo.InvariantCulture);
        }
Beispiel #2
0
        /// <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)}");
        }