コード例 #1
0
        protected void CheckTypes()
        {
            var types = _originalTypes
                        .Where(t => !ExcludedTypes.Contains(t) && !(ExcludeTypeCallback?.Invoke(t) ?? false))
                        .ToList();
            var abstractions = _abstractionTypes
                               .Where(t => !ExcludedTypes.Contains(t) && !(ExcludeTypeCallback?.Invoke(t) ?? false))
                               .ToList();

            var missingAbstractions = new List <Type>();

            foreach (var t in GetTypes())
            {
                types.Remove(t.Original);

                if (t.Abstraction == null)
                {
                    missingAbstractions.Add(t.Original);
                }
                else
                {
                    abstractions.Remove(t.Abstraction);
                }
            }

            missingAbstractions.Should().BeEmpty($"abstraction for following {missingAbstractions.Count} type(s) not found: {String.Join(", ", missingAbstractions.Select(t => t.FullName))}");
            types.Should().BeEmpty();
            abstractions.Should().BeEmpty();
        }
コード例 #2
0
        protected void CheckConstructors(params Type[] skipTypes)
        {
            var adapterTypes = _adapterTypes
                               .Where(t => !ExcludedTypes.Contains(t) && !(ExcludeTypeCallback?.Invoke(t) ?? false))
                               .ToList();

            foreach (var types in GetTypes().Where(t => t.Abstraction != null))
            {
                if (types.Abstraction != null && types.Original != null && !IsStatic(types.Original) && !skipTypes.Contains(types.Original))
                {
                    var adapter = FindAdapters(adapterTypes, types.Abstraction).FirstOrDefault();

                    if (adapter != null && !skipTypes.Contains(adapter))
                    {
                        var adapterConstructors = adapter.GetConstructors();
                        var wrapperConstructor  = FindConstructor(adapterConstructors, types.Original);

                        wrapperConstructor.Should().NotBeNull($"The adapter {adapter.Name} of abstraction {types.Abstraction.Name} must have a ctor({types.Original.Name})");

                        var originalConstructors = types.Original.GetConstructors();

                        foreach (var originalCtor in originalConstructors)
                        {
                            if (originalCtor.GetCustomAttribute <ObsoleteAttribute>() == null)
                            {
                                var orginalParams = originalCtor.GetParameters().Select(p => p.ParameterType).ToArray();
                                var adapterCtor   = FindConstructor(adapterConstructors, orginalParams);

                                adapterCtor.Should().NotBeNull($"The adapter {adapter.Name} of abstraction {types.Abstraction.Name} must have a ctor({String.Join(", ", orginalParams.Select(p => p.Name))})");
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
        private IEnumerable <(Type Original, Type Abstraction)> GetTypes()
        {
            foreach (var originalType in _originalTypes)
            {
                if (CustomTypeMappings.TryGet(originalType, out var abstractionTypes))
                {
                    foreach (var abstractionType in abstractionTypes)
                    {
                        yield return(originalType, abstractionType);
                    }
                }
                else
                {
                    if (ExcludedTypes.Contains(originalType))
                    {
                        continue;
                    }

                    if (ExcludeTypeCallback?.Invoke(originalType) == true)
                    {
                        continue;
                    }

                    var abstractionTypeName = BuildAbstractionTypeName(originalType);
                    var abstractionType     = _abstractionTypes.FirstOrDefault(t => t.FullName == abstractionTypeName);

                    yield return(originalType, abstractionType);
                }
            }
        }
コード例 #4
0
        protected void CheckAdapters()
        {
            var abstractions = _abstractionTypes
                               .Where(t => !ExcludedTypes.Contains(t) && !(ExcludeTypeCallback?.Invoke(t) ?? false))
                               .ToList();
            var adapterTypes = _adapterTypes
                               .Where(t => !ExcludedTypes.Contains(t) && !(ExcludeTypeCallback?.Invoke(t) ?? false))
                               .ToList();

            foreach (var abstractionType in abstractions)
            {
                var adapters = FindAdapters(adapterTypes, abstractionType);

                adapters.Should().HaveCount(1, $"abstraction {abstractionType.Name} must have an adapter.");
            }
        }