public Task <RevealToggleResponse> Handle(RevealToggleRequest request, CancellationToken cancellationToken) { try { var type = discoverToggleTypesService.Scan() .Where(type => type.FullName.Equals(request.ToggleType, StringComparison.InvariantCultureIgnoreCase)) .SingleOrDefault(); if (type != null) { var attributes = type.GetCustomAttributes(typeof(DesignTypeParameterAttribute), inherit: true); if (attributes != null && attributes.Any()) { var parametersDescription = attributes.Select(item => { var attribute = ((DesignTypeParameterAttribute)item); return(new RevealToggleParameterResponse() { Name = attribute.ParameterName, ClrType = attribute.ParameterType, Description = attribute.ParameterDescription }); }).ToList(); return(Task.FromResult(new RevealToggleResponse() { Type = request.ToggleType, Parameters = parametersDescription })); } else { return(Task.FromResult(new RevealToggleResponse() { Type = request.ToggleType, Parameters = new List <RevealToggleParameterResponse>() })); } } else { throw new InvalidOperationException($"The toggle type {request.ToggleType} can't be loaded and reveleaded."); } } catch { throw new InvalidOperationException($"The toggle type {request.ToggleType} can't be revealed because unexpected exception is throwed."); } }
public Task <KnownTypesToggleResponse> Handle(KnownTypesToggleRequest request, CancellationToken cancellationToken) { var scaneedToggles = new List <KnownTypesToggleDetailResponse>(); foreach (var type in _discoverToggleTypesService.Scan()) { var attribute = type.GetCustomAttribute <DesignTypeAttribute>(); scaneedToggles.Add(new KnownTypesToggleDetailResponse() { Type = type.ShorthandAssemblyQualifiedName(), Assembly = type.Assembly.GetName(copiedName: false).Name, FriendlyName = attribute != null ? attribute.FriendlyName : type.Name, Description = attribute != null ? attribute.Description : "No description" }); } return(Task.FromResult(new KnownTypesToggleResponse() { ScannedAssemblies = scaneedToggles.GroupBy(r => r.Assembly).Count(), Toggles = scaneedToggles })); }