static void Main(string[] args)
        {
            Mathematic       mathematic = new Mathematic();
            CachingDecorator caching    = new CachingDecorator(mathematic);
            LoggingDecorator logging    = new LoggingDecorator(caching);

            logging.Operation();
            Console.ReadLine();
        }
Exemple #2
0
            public static ICommandHandler <TCommand> Default <TCommand>(object handler, IServiceProvider provider)
            {
                var logger               = provider.GetService <ILogger>();
                var validations          = provider.GetServices <IValidator <TCommand> >();
                var transactionDecorator = new TransactionDecorator <TCommand>((ICommandHandler <TCommand>)handler);
                var loggingDecorator     = new LoggingDecorator <TCommand>(transactionDecorator, logger);
                var validationDecorator  = new ValidationDecorator <TCommand>(loggingDecorator, validations);

                return(validationDecorator); // order is revers for decorators
            }
Exemple #3
0
            public static ICommandHandler <TCommand> DefaultWithRetry <TCommand>(object handler, IServiceProvider provider)
            {
                var logger      = provider.GetService <ILogger>();
                var cache       = provider.GetService <ICache>();
                var validations = provider.GetServices <IValidator <TCommand> >();

                var transactionDecorator = new TransactionDecorator <TCommand>((ICommandHandler <TCommand>)handler);
                var loggingDecorator     = new LoggingDecorator <TCommand>(transactionDecorator, logger);
                var validationDecorator  = new ValidationDecorator <TCommand>(loggingDecorator, validations);
                var retryDecorator       = new RetryDecorator <TCommand>(validationDecorator, logger, nrRetry: 3);
                var cacheDecorator       = new CacheDecorator <TCommand>(retryDecorator, cache);

                return(cacheDecorator); // order is revers for decorators
            }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient <IService, Service>();
            //services.AddTransient<ICalculator, Calculator>();

            services.AddTransient(serviceProvider =>
            {
                var service = serviceProvider.GetService <IService>();

                var decorator = LoggingDecorator <ICalculator> .Create(new Calculator(service));

                return(decorator);
            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
Exemple #5
0
        static void Main(string[] args)
        {
            var container = ConfigureContainer();

            _bankAccount = container.Resolve <BankAccount>();
            _logger      = container.Resolve <LoggingDecorator>();
            _validator   = container.Resolve <ValidationDecorator>();

            Console.WriteLine("Enter action followed by amount e.g. \"withdraw 2000\". Enter \"logs\" to get all logs. Enter \"exit\" to exit the program.");
            var input = Console.ReadLine();

            while (input != "exit")
            {
                try
                {
                    if (input.Contains("withdraw "))
                    {
                        ProcessWithdraw(input);
                    }
                    else if (input.Contains("deposit "))
                    {
                        ProcessDeposit(input);
                    }
                    else if (input.Contains("balance"))
                    {
                        GetBalance();
                    }
                    else if (input == "logs")
                    {
                        Console.WriteLine("Here are all the logs:");
                        Console.WriteLine(_logger.GetAllLogs());
                    }
                    else
                    {
                        Console.WriteLine("Invalid input.");
                    }
                }
                catch (Exception ex)
                {
                    _logger.Log(ex.Message);
                }
                finally
                {
                    input = Console.ReadLine();
                }
            }
        }
Exemple #6
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "DecoratorApp", Version = "v1"
                });
            });
            services.AddScoped <AuthorService>();
            services.AddScoped(serviceProvider =>
            {
                var authorService = serviceProvider.GetRequiredService <AuthorService>();

                IAuthorService loggingDecorator = new LoggingDecorator(authorService);

                return(loggingDecorator);
            });
        }
Exemple #7
0
 public EventController(IHostingEnvironment appEnvironment)
 {
     _appEnvironment = appEnvironment;
     repository      = LoggingDecorator <IEventRepository> .Create(new EventRepository());
 }