public static void Main()
await new MicroserviceService<ServiceContainer>()
.UseMessageBus<ServiceBusConfiguration>((c, settings) => c.WithRabbitMQCluster(settings.LoanManagementRabbitMQCluster))
.UseWebApi<WebApiStartup>()
public class ServiceBusConfiguration
public void InitMessagebus(IMessageBusFactory factory)
factory.Subscribe<LoanCretedEvent>();
public class ServiceContainer
public void InitContainer(ServiceContainer container)
container.Singleton<ILoanService, LoanService>();
container.GrpcClient<ICustomerGrpcClient, CustomerGrpClient>();
container.Singleton<IMessageHandler<LoanCreatedEvent>>, LoanCreatedHandler>();
public class LoanCreatedHandler : IMessgeHandler<LoanCreatedEvent>
private IRepository<Loans> loanRepository;
public LoanCreatedHandler(IRepository<Loans> loanRepository,
IPublisher<SendEmailCommand> emailCommandPublisher)
this.loanRepository = loanRepository;
public void Handle<LoanCratedEvent>(LoanCreatedEvent loanCreated){
emailCommandPublisher.Publish(new SendEmailCommand(){
Template = "congratulations_with_your_new_purchase.tmpl",
public class LoanCreatedEvent : IEvent
public string Id { get; set; }
public string ProductId { get; set; }
public LoanStatus Status { get; set; }