コード例 #1
0
        private static string GetAdditionalNamespaceUsings(EntityContractDeclarationModel entityContractDeclaration, string targetNamespace)
        {
            var namespaceUsings = new HashSet <string>(defaultNamespacesUsed, StringComparer.InvariantCulture);

            foreach (var i in entityContractDeclaration.DeclaringInterfaceType.GetInterfaces())
            {
                if (!namespaceUsings.Contains(i.Namespace))
                {
                    namespaceUsings.Add(i.Namespace);
                }
            }

            foreach (var prop in entityContractDeclaration.GetProperties())
            {
                var entityNamespace = entityContractDeclaration.EntityContractDeclarationAttribute?.Namespace ?? prop.DeclaringProperty.PropertyType.Namespace;
                if ((entityNamespace != targetNamespace) && !namespaceUsings.Contains(entityNamespace))
                {
                    namespaceUsings.Add(entityNamespace);
                }
            }

            foreach (var a in entityContractDeclaration.GetCustomAttributes())
            {
                if (!namespaceUsings.Contains(a.AttributeType.Namespace))
                {
                    namespaceUsings.Add(a.AttributeType.Namespace);
                }

                if ((a.ConstructorArguments != null) && (a.ConstructorArguments.Count > 0))
                {
                    foreach (var ca in a.ConstructorArguments)
                    {
                        if (!namespaceUsings.Contains(ca.ArgumentType.Namespace))
                        {
                            namespaceUsings.Add(ca.ArgumentType.Namespace);
                        }
                    }
                }
            }

            StringBuilder sb = new StringBuilder();

            foreach (var ns in namespaceUsings.OrderBy(s => s, StringComparer.InvariantCulture))
            {
                sb.Append(@"
using ").Append(ns).Append(";");
            }

            return(sb.ToString());
        }