static void Main(string[] args) { Mathematic mathematic = new Mathematic(); CachingDecorator caching = new CachingDecorator(mathematic); LoggingDecorator logging = new LoggingDecorator(caching); logging.Operation(); Console.ReadLine(); }
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 }
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); }
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(); } } }
// 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); }); }
public EventController(IHostingEnvironment appEnvironment) { _appEnvironment = appEnvironment; repository = LoggingDecorator <IEventRepository> .Create(new EventRepository()); }