我已经编写了一些代码来从我们的CMS中生成的XML模式生成.NET类型。这很顺利,并产生了我期待的结果。
现在我想自定义生成类型的默认(无参数)构造函数。我有一些看起来像的代码:
CodeNamespace codeNamespace = new CodeNamespace("MyNamespace");
// import type mappings from schema
// export type mappings into codeNamespace
CodeTypeDeclaration codeType = codeNamespace.Types.First();
此时,我可以成功修改codeType
;添加/删除属性,属性等
但是,检查Members
的{{1}}属性表示尚未定义默认构造函数。当然可以加一个;但是当我写出代码字符串(使用codeType
)时,另一个默认构造函数被添加到输出中(在这种情况下,用于在从模式派生的字段上设置一些默认值)。
我要做的是基本上在默认构造函数中插入对方法的调用(我可以按照上面的方法成功添加到CSharpCodeProvider.GenerateCodeFromNamespace
)。
(如何)我可以处理这样一个事实:当我写出代码字符串时,默认构造函数(之前codeType
集合中没有)插入?
答案 0 :(得分:1)
我在调试过程中感到困惑 - 正在查看codeType
没有定义默认构造函数,并将生成的源与执行包含的类型进行比较默认构造函数。
我能够使用类似于以下的代码来处理这两种情况:
var ctor = codeType.Members
.Cast<CodeTypeMember>()
.SingleOrDefault(m => m.GetType() == typeof(CodeConstructor));
if (ctor == null)
{
//codeType didn't define a default constructor, so create one
ctor = new CodeConstructor() { Attributes = MemberAttributes.Public };
}
else
{
//codeType did define a default constructor, remove it before modifying
codeType.Members.Remove(ctor);
}
//make some modifications to ctor
//add ctor to the codeType
codeType.Members.Add(ctor);