Exemplo n.º 1
0
        public static IServiceCollection AddFabrication(
            this IServiceCollection services,
            Action <ConventionExpression> conventions = null)
        {
            services.AddSingleton <Faker>();

            services.AddSingleton <FabricatedSession, FabricatedSession>();

            services.AddSingleton(sp =>
            {
                var fixture = new Fixture();
                var faker   = sp.GetService <Faker>();
                var session = sp.GetService <FabricatedSession>();

                fixture.AddDefaultMiruConvention(faker);

                if (conventions != null)
                {
                    fixture.AddConvention(faker, conventions);
                }

                // TODO: better name for this builder
                fixture.Customizations.Add(new FabricationSpecimenBuilder(fixture, session));

                return(fixture);
            });

            services.AddSingleton <FabSupport>();

            services.AddSingleton <Fabricator>();

            return(services);
        }
        public static IServiceCollection AddFabrication <TFabricator>(
            this IServiceCollection services,
            Action <ConventionExpression> conventions = null)
            where TFabricator : Fabricator
        {
            services.Scan(scan => scan
                          .FromAssemblies(typeof(TFabricator).Assembly)
                          .AddClasses(classes => classes.AssignableTo(typeof(ICustomFabricator <>)))
                          .AsImplementedInterfaces()
                          .As <ICustomFabricator>()
                          .WithSingletonLifetime());

            services.AddSingleton <Faker>();

            services.AddSingleton <FabricatedSession, FabricatedSession>();

            services.AddSingleton(sp =>
            {
                var fixture = new Fixture();
                var faker   = sp.GetService <Faker>();
                var session = sp.GetService <FabricatedSession>();

                fixture.AddDefaultMiruConvention(faker);

                if (conventions != null)
                {
                    fixture.AddConvention(faker, conventions);
                }

                // TODO: better name for this builder
                fixture.Customizations.Add(new FabricationSpecimenBuilder(fixture, session));

                return(fixture);
            });

            services.AddSingleton <FabSupport>();

            services.AddSingleton <TFabricator>();

            services.AddSingleton <Fabricator>(sp => sp.GetRequiredService <TFabricator>());

            return(services);
        }