コード例 #1
0
        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.");
            }
        }
コード例 #2
0
        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
            }));
        }