public async Task IncrementCounter(Expression <Func <UsageModel, int> > counter) { var usage = await LoadUsage(); var property = (MemberExpression)counter.Body; var propertyInfo = (PropertyInfo)property.Member; var value = (int)propertyInfo.GetValue(usage.Model); propertyInfo.SetValue(usage.Model, value + 1); await service.WriteLocalData(usage); }
async Task UpdateUsageMetrics(PropertyInfo propertyInfo) { var data = await service.ReadLocalData(); var usage = await GetCurrentReport(data); var value = (int)propertyInfo.GetValue(usage.Measures); propertyInfo.SetValue(usage.Measures, value + 1); await service.WriteLocalData(data); }
public async Task IncrementCounter(Expression <Func <UsageModel, int> > counter) { var usage = await LoadUsage(); // because Model is a struct, it needs to be boxed in order for reflection to work object model = usage.Model; var property = (MemberExpression)counter.Body; var propertyInfo = (PropertyInfo)property.Member; var value = (int)propertyInfo.GetValue(model); propertyInfo.SetValue(model, value + 1); usage.Model = (UsageModel)model; await service.WriteLocalData(usage); }
public async Task IncrementCounter(Expression <Func <UsageModel.MeasuresModel, int> > counter) { await Initialize(); var data = await service.ReadLocalData(); var usage = await GetCurrentReport(data); var property = (MemberExpression)counter.Body; var propertyInfo = (PropertyInfo)property.Member; log.Verbose("Increment counter {Name}", propertyInfo.Name); var value = (int)propertyInfo.GetValue(usage.Measures); propertyInfo.SetValue(usage.Measures, value + 1); await service.WriteLocalData(data); }