变量扩展


一、定义扩展类

  在 profile 目录下,添加类文件,编写代码(示例使用 C# 编写)如下:

using System.ComponentModel;
using CodeBuilder.Core;

public class ProfileExt1
{
    [Description("使用 FluentApi 进行实体映射。")]
    public bool Fluent { get; set; }

    [Description("模块名。")]
    [UnPersistently]
    public string Module { get; set; }

    [Description("子命名空间。用于指定默认命名空间之后的子目录,可以使用.来无限扩展,如 Customer.OrderHistory。")]
    [UnPersistently]
    public string SubNameSpace { get; set; }
}

  属性上可使用以下特性进行标注:

  • DescriptionAttribute

  在属性上进行标注,可在【属性窗口】里看到此注释。

  • DefaultValueAttribute

  默认值,在【属性窗口】中默认填入。如:

[DefaultAttribute(true)]
public bool Fluent { get; set; }
  • CategoryAttribute

  对变量进行分组。如:

[CategoryAttribute("项目")]
public string ProjectName { get; set; }
  • DisplayNameAttribute

  标注在【属性窗口】里显示的名称。

  • RequiredCheckAttribute

  表示此项为必填,在生成代码前会被检测。

  • UnPersistentlyAttribute

  表示此属性不会被持久化,变量的值不会保存到文件,每次加载后均为空值或默认值。


💡 多说一句

  注意类文件里要引入 System.ComponentModel 命名空间。RequiredCheckAttributeUnPersistentlyAttribute 需要引用 CodeBuilder.Core 命名空间。


二、变量初始化

  实现变量初始化器 IProfileInitializer 可以对变量进行赋值。此接口的定义如下:

namespace CodeBuilder.Core.Initializers
{
    /// <summary>
    /// 提供对变量进行初始化的接口。
    /// </summary>
    public interface IProfileInitializer
    {
        void Initialize(dynamic profile, TemplateDefinition template);
    }
}

  比如根据模板定义来设置变量中的语言:

public class LanguageInitializer : IProfileInitializer
{
    public void Initialize(dynamic profile, TemplateDefinition template)
    {
        if (template == null)
        {
            return;
        }
        if (template.Language == "CSharp")
        {
            profile.Language = Language.CSharp;
        }
        else if (template.Language == "Java")
        {
            profile.Language = Language.Java;
        }
        else if (template.Language == "VB")
        {
            profile.Language = Language.VB;
        }
        else
        {
            profile.Language = Language.None;
        }
    }
}

  由于 profile 是 dynamic 类型,因此必须保证你所使用的属性是在扩展类里被定义过的。

  TemplateDefinition 类的定义详见 模板定义 - 附


💡 多说一句

  可以在配置文件 configassemblies.cfg 的 Profile 属性里增加程序集。