Ejemplo n.º 1
0
 protected RegistrationCodeGeneratorBase(IContainerSettings settings, TemplateRegistrationMetadata metadata, Type returnType)
 {
     Settings = settings;
     Metadata = metadata;
     ReturnType = returnType;
     InstanceField = null != metadata ? InstanceFieldPrefix + Metadata.Index : null;
 }
Ejemplo n.º 2
0
 public MethodInjectionCodeGenerator(IMethod method, string instanceVariable, TemplateRegistrationMetadata metadata, string indent)
 {
     _method = method;
     _instanceVariable = instanceVariable;
     _metadata = metadata;
     _indent = indent;
     _stringBuilder = new StringBuilder(2000);
 }
 public ConstructorInjectionCodeGenerator(TemplateRegistrationMetadata metadata, string assignToVariable, bool declareVariable, string indent)
 {
     _metadata = metadata;
     _registration = metadata.Registration;
     _assignToVariable = assignToVariable;
     _declareVariable = declareVariable;
     _indent = indent;
     _stringBuilder = new StringBuilder(2000);
 }
 public ParameterInjectionCodeGenerator(IList<IParameter> parameters, TemplateRegistrationMetadata metadata, string indent, string memberTypeWord, bool isConstructor)
 {
     _parameters = parameters;
     _metadata = metadata;
     _indent = indent;
     _isConstructor = isConstructor;
     _memberTypeWord = memberTypeWord;
     _parameterCodeGeneratorMethodMap = InitializeParameterCodeGeneratorMethodMap();
     _parameterCode = new List<string>();
 }
        protected string ProcessValueFactoryItem(
            string typeFullName,
            TemplateRegistrationMetadata metadata,
            int memberIndex,
            bool isConstructor,
            string indent,
            StringBuilder preMemberCodeBulider,
            string variableWord,
            Type valueFactoryMemberType)
        {
            // The Pre-constructor code block used here wires up the value factory at runtime.
            // Line of code to get the registration instance.
            // Only generate this line once per constructor invocation.
            if (false == metadata.GeneratedRegistrationWireUpVariable)
            {
                preMemberCodeBulider.Append(indent);
                preMemberCodeBulider.Append("IRegistration registration = Registrations[");
                preMemberCodeBulider.Append(metadata.Index);
                preMemberCodeBulider.Append("];");
                preMemberCodeBulider.AppendLine();
                metadata.GeneratedRegistrationWireUpVariable = true;
            }

            // Line of code to get a reference to the value factory for this specific parameter at runtime.
            preMemberCodeBulider.Append(indent);
            preMemberCodeBulider.Append("var func");
            preMemberCodeBulider.Append(memberIndex);
            preMemberCodeBulider.Append(" = ((");
            preMemberCodeBulider.Append(valueFactoryMemberType.Name);
            preMemberCodeBulider.Append(")registration.");
            preMemberCodeBulider.Append(isConstructor ? "Constructor.Parameters" : "Members");
            preMemberCodeBulider.Append("[");
            preMemberCodeBulider.Append(memberIndex);
            preMemberCodeBulider.Append("]).ValueFactory;");
            preMemberCodeBulider.AppendLine();

            // Line of code that executes the value factory and assigns the result to a variable.
            string variable = string.Format("{0}{1}", variableWord, memberIndex);
            preMemberCodeBulider.Append(indent);
            preMemberCodeBulider.Append("var ");
            preMemberCodeBulider.Append(variable);
            preMemberCodeBulider.Append(" = (");
            preMemberCodeBulider.Append(typeFullName);
            preMemberCodeBulider.Append(")func");
            preMemberCodeBulider.Append(memberIndex);
            preMemberCodeBulider.Append("();");
            preMemberCodeBulider.AppendLine();
            preMemberCodeBulider.AppendLine();

            // Return just the variable name.
            return variable;
        }
 public ThreadLifetimeRegistrationCodeGenerator(IContainerSettings settings, TemplateRegistrationMetadata metadata, Type returnType)
     : base(settings, metadata, returnType)
 {
 }
Ejemplo n.º 7
0
 public MemberInjectionCodeGenerator(TemplateRegistrationMetadata metadata, string instanceVariable, string indent)
 {
     _metadata = metadata;
     _instanceVariable = instanceVariable;
     _indent = indent;
 }
Ejemplo n.º 8
0
        protected void AppendCommentBlock(StringBuilder sb, TemplateRegistrationMetadata metadata)
        {
            if (false == Settings.ShouldGenerateMethodComments)
            {
                return;
            }

            const string indent = Indentations.MemberIndent;
            const string notSpecified = "<Not_Specified>";

            sb.Append(indent);
            sb.Append("// ");
            sb.Append(metadata.RegistrationType);
            sb.Append(" Registration");
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// Registration Index .................: ");
            sb.Append(metadata.Index);
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// Registration Key ...................: ");
            sb.Append("\"");
            sb.Append(metadata.RegistrationKey);
            sb.Append("\"");
            sb.AppendLine();

            IRegistration registration = metadata.Registration;

            sb.Append(indent);
            sb.Append("// Concrete Type ......................: ");
            sb.Append(registration.ConcreteType.AssemblyQualifiedName);
            sb.AppendLine();

            string mappedTypeFullName = (null == registration.MappedType) ? notSpecified : registration.MappedType.AssemblyQualifiedName;

            sb.Append(indent);
            sb.Append("// Mapped Type ........................: ");
            sb.Append(mappedTypeFullName);
            sb.AppendLine();

            string registeredName = string.IsNullOrEmpty(registration.Name) ? notSpecified : registration.Name;

            sb.Append(indent);
            sb.Append("// Registered Name ....................: ");
            sb.Append(registeredName);
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// Lifetime ...........................: ");
            sb.Append(registration.Lifetime);
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// Operation ..........................: ");
            sb.Append(registration.Operation);
            sb.AppendLine();

            sb.Append(indent);
            sb.Append("// Should Pre-Create Instance .........: ");
            sb.Append(registration.ShouldPreCreateInstance);
            sb.AppendLine();

            IConstructor constructor = registration.Constructor;
            bool isConstructorRegistered = (null != constructor);

            sb.Append(indent);
            sb.Append("// Is Constructor Registered ..........: ");
            sb.Append(isConstructorRegistered);
            sb.AppendLine();

            if (isConstructorRegistered)
            {
                int constructorParameterCount = (null == constructor.Parameters) ? 0 : constructor.Parameters.Count;

                sb.Append(indent);
                sb.Append("// Constructor Parmeter Count .........: ");
                sb.Append(constructorParameterCount);
                sb.AppendLine();

                if (null != constructor.Parameters && constructorParameterCount > 0)
                {
                    int index = 0;
                    foreach (IParameter parameter in constructor.Parameters)
                    {
                        string dots = new string('.', 20 - index.ToString(CultureInfo.InvariantCulture).Length);
                        string parameterDescription = string.Format("//     Parameter[{0}] {1}: ", index, dots);

                        sb.Append(indent);
                        sb.Append(parameterDescription);
                        sb.Append(parameter);
                        sb.AppendLine();
                        index++;
                    }
                }
            }
        }
Ejemplo n.º 9
0
 public GeneratedCodeItem(TemplateRegistrationMetadata metadata, string code)
 {
     Metadata = metadata;
     Code = code;
 }