Newer
Older
ReservationPattern / ReservationSaga / Program.cs
@Derek Comartin Derek Comartin on 16 Feb 2022 1 KB Init
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using NServiceBus;
using Reservation;
using ReservationSaga;

static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseNServiceBus(context =>
        {
            var endpointConfiguration = new EndpointConfiguration("Demo");
            var transport = endpointConfiguration.UseTransport<LearningTransport>();
            var persistence = endpointConfiguration.UsePersistence<LearningPersistence>();

            var routing = transport.Routing();

            routing.RouteToEndpoint(
                assembly: typeof(UserRegistration).Assembly,
                destination: "Demo");

            return endpointConfiguration;
        })
        .ConfigureServices(services =>
        {
            services.AddSingleton<FakeDatabase>();
            services.AddTransient<IUserRepository, UserRepository>();
            services.AddTransient<UsernameReservation>();
        });

var host = CreateHostBuilder(args).Build();
await host.StartAsync();

var session = host.Services.GetRequiredService<IMessageSession>();
var usernameReservation = host.Services.GetRequiredService<UsernameReservation>();

var username = string.Empty;
while (username != "q")
{
    Console.Write("Username: ");
    username = Console.ReadLine();
    if (usernameReservation.IsAvailable(username))
    {
        await session.Publish(new UserRegistrationStarted { Username = username });
    }
    else
    {
        Console.WriteLine("Username already exists.");
    }
    Console.ReadLine();
}