public void ItShouldTellCreateCommand()
        {
            var context  = new Mock <ICustomerRepository>();
            var provider = new CustomerActorProvider(Sys, context.Object);

            context.Setup(_ => _.CreateCustomer(It.IsAny <Customer>()));

            var actor = provider.Get();

            actor.Tell(new CustomerCommands.CreateCustomer(1, "first", "last"));
        }
Beispiel #2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // redis
            var redisContext            = new RedisContext();
            var redisCustomerRepository = new RedisDb.Repositories.CustomerRepository(redisContext);

            // mongodb
            var mongoClient             = new MongoClient();
            var mongoDatabase           = mongoClient.GetDatabase("todo-install-mongo");
            var mongoCustomerRepository = new MongoDb.Repositories.CustomerRepository(mongoDatabase);

            // repositories
            var customerRepository = redisCustomerRepository;

            // var customerRepository = mongoCustomerRepository;
            services.AddSingleton <ICustomerRepository>(customerRepository);

            // akka.net
            var config                = ConfigurationFactory.ParseString(GetHocon());
            var actorSystem           = ActorSystem.Create("clean-arch-system", config);
            var customerActorProvider = new CustomerActorProvider(actorSystem, customerRepository);
            // note(bwills): create employee repo - this is here to verify we can generate two actors
            var employeeActorProvider = new EmployeeActorProvider(actorSystem, customerRepository);

            services.AddSingleton <IActorRefFactory>(actorSystem);
            services.AddSingleton <ICustomerActorProvider>(customerActorProvider);
            services.AddSingleton <IEmployeeActorProvider>(employeeActorProvider);

            // mediatr
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(RequestPreProcessorBehavior <,>));
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(RequestValidationBehavior <,>));
            services.AddTransient(typeof(IPipelineBehavior <,>), typeof(RequestPerformanceBehaviour <,>));
            services.AddMediatR(typeof(GetCustomerDetailQueryHandler));

            // setup
            services
            .AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
            .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining <GetCustomerDetailQueryValidator>());

            // swagger
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = nameof(WebApi), Version = "v1"
                });
            });
        }