Exemplo n.º 1
0
        private void CheckForMetadataOverride(string key, TemplateRegistrationMetadata metadata)
        {
            if (false == _metadataMap.ContainsKey(key))
            {
                return;
            }

            TemplateRegistrationMetadata oldMetadata = _metadataMap[key];
            oldMetadata.OverriddenBy = metadata;
            oldMetadata.ShouldSkip = true;
            oldMetadata.SkippedReason = SkippedRegistrationReason.Overridden;
            oldMetadata.SkippedReasonDescription = "The registration was overridden by another registration.";
            UpdateSkippedRegistrationComments(oldMetadata);
        }
Exemplo n.º 2
0
        private void UpdateSkippedRegistrationComments(TemplateRegistrationMetadata metadata)
        {
            const string indent = Indentations.MemberIndent;
            StringBuilder sb = new StringBuilder(metadata.MembersCommentBlock, metadata.MembersCommentBlock.Length + 500);

            sb.Append(indent);
            sb.Append("// Skip This Registration .............: ");
            sb.Append(metadata.ShouldSkip);
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// Skipped Reason .....................: ");
            sb.Append(metadata.SkippedReason);
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// Skipped Reason Description .........: ");
            sb.Append(metadata.SkippedReasonDescription);
            sb.AppendLine();

            if (null != metadata.OverriddenBy)
            {
                sb.Append(indent);
                sb.Append("// Overridden By Registration Index ...: ");
                sb.Append(metadata.OverriddenBy.Index);
                sb.AppendLine();
            }

            sb.Append(indent);
            sb.Append("// ");
            sb.Append(new string('-', 80));
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// NOTE: There is no code generated for this skipped registration.");
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// ");
            sb.Append(new string('-', 80));
            sb.AppendLine();

            sb.AppendLine(); // Blank line to separate from next member

            metadata.MembersCommentBlock = sb.ToString();
        }
Exemplo n.º 3
0
 private string GenerateGetInstanceCodeGeneratorMethodKey(TemplateRegistrationMetadata metadata)
 {
     return string.Format("GetInstance|{0}", metadata.Registration.Lifetime);
 }
Exemplo n.º 4
0
        private void ProcessRegistrations()
        {
            int registrationsCount = Registrations.Count;
            _metadataList = new List<TemplateRegistrationMetadata>(registrationsCount);
            _metadataMap = new Dictionary<string, TemplateRegistrationMetadata>(registrationsCount);

            int index = -1;
            foreach (IRegistration registration in Registrations)
            {
                index++;

                ValidateRegistration(registration, index);

                CheckRegistrationForAssembliesToBeReferenced(registration);

                MethodNameGenerator methodNameGenerator = new MethodNameGenerator(index, registration);

                string registrationKey = (registration.MappedType ?? registration.ConcreteType) + registration.Name;

                Type typeKey = registration.MappedType ?? registration.ConcreteType;

                TemplateRegistrationMetadata metadata =
                    new TemplateRegistrationMetadata(
                        methodNameGenerator,
                        _namedHandlerMapEntries,
                        _namedTypedHandlerMapEntries,
                        _namedHandlerSubMapEntries,
                        _namedTypedHandlerSubMapEntries)
                        {
                            Index = index,
                            InstanceFieldName = "Instance" + index,
                            RegistrationKey = registrationKey,
                            Registration = registration,
                            RegistrationType = RegistrationType.Explicit,
                            TypeKey = typeKey
                        };

                _metadataList.Add(metadata);

                var codeGenerationResult = GenerateGetInstanceCodeForRegistration(metadata);
                if (codeGenerationResult != RegistrationCodeGenerationResult.Successful)
                {
                    continue;
                }

                CheckForMetadataOverride(registrationKey, metadata);
                _metadataMap[registrationKey] = metadata;
            }
        }
Exemplo n.º 5
0
        private RegistrationCodeGenerationResult GenerateGetInstanceCodeForRegistration(TemplateRegistrationMetadata metadata)
        {
            metadata.CodeGeneratorMethodKey = GenerateGetInstanceCodeGeneratorMethodKey(metadata);
            Func<TemplateRegistrationMetadata, Type, IRegistrationCodeGenerator> func;

            if (false == _codeGeneratorMethodMap.TryGetValue(metadata.CodeGeneratorMethodKey, out func))
            {
                metadata.ShouldSkip = true;
                metadata.SkippedReason = SkippedRegistrationReason.NoCodeGenerator;
                metadata.SkippedReasonDescription =
                    string.Format(
                        "The code generator delegate was not found for the CodeGeneratorMethodKey '{0}'."
                        , metadata.CodeGeneratorMethodKey);
                UpdateSkippedRegistrationComments(metadata);
                return RegistrationCodeGenerationResult.Skipped;
            }

            IRegistrationCodeGenerator codeGenerator = func(metadata, metadata.TypeKey);
            codeGenerator.Generate();
            return RegistrationCodeGenerationResult.Successful;
        }