private void SerializeExtender(IDesignerSerializationManager manager, ConstantsExtenderProvider provider, ComponentCollection components, CodeStatementCollection statements) { foreach(IComponent component in components) { Control control = component as Control; if(control != null && (control as Form == null)) { CodeMethodInvokeExpression methodcall = new CodeMethodInvokeExpression(base.SerializeToExpression(manager, provider), "SetConstants"); methodcall.Parameters.Add(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), control.Name)); string[] constants = provider.GetConstants(control); if(constants != null) { StringBuilder sb = new StringBuilder(); sb.Append("new string[] { "); foreach(string constant in constants) { sb.Append(typeof(T).FullName); sb.Append("."); sb.Append(constant); sb.Append(", "); } sb.Remove(sb.Length - 2, 2); sb.Append(" }"); methodcall.Parameters.Add(new CodeSnippetExpression(sb.ToString())); } else { methodcall.Parameters.Add(new CodePrimitiveExpression(null)); } statements.Add(methodcall); } } }
public override object Serialize(IDesignerSerializationManager manager, object value) { ConstantsExtenderProvider provider = value as ConstantsExtenderProvider; CodeDomSerializer baseClassSerializer = manager.GetSerializer(typeof(ConstantsExtenderProvider).BaseType, typeof(CodeDomSerializer)) as CodeDomSerializer; CodeStatementCollection statements = baseClassSerializer.Serialize(manager, value) as CodeStatementCollection; IDesignerHost host = (IDesignerHost)manager.GetService(typeof(IDesignerHost)); ComponentCollection components = host.Container.Components; this.SerializeExtender(manager, provider, components, statements); return statements; }