예제 #1
0
        /// <summary>
        /// <para>初始化与领域对象相关的行为,由于许多行为是第一次使用对象的时候才触发,这样会导致没有使用对象却需要一些额外特性的时候缺少数据</para>
        /// <para>所以我们需要在使用领域驱动的之前执行初始化操作</para>
        /// </summary>
        internal static void Initialize()
        {
            if (_initialized)
            {
                return;
            }
            _initialized = true;

            //以下代码执行顺序不能变
            TypeIndex = GetTypeIndex();

            //指定动态类型的定义
            RemoteType.Initialize();

            //执行远程能力特性的初始化,收集相关数据
            RemotableAttribute.Initialize();


            //触发没有派生类的领域对象的静态构造
            foreach (var objectType in TypeIndex)
            {
                if (DerivedClassAttribute.IsDerived(objectType))
                {
                    continue;                                              //不执行派生类的
                }
                DomainObject.StaticConstructor(objectType);
            }

            //先执行派生类的
            DerivedClassAttribute.Initialize();

            //再执行扩展的
            ExtendedClassAttribute.Initialize();
        }
 internal static void Initialize()
 {
     //主动触发静态构造
     foreach (var info in _extensionTypes)
     {
         var objectType = info.Key;
         //我们在触发扩展类型的静态构造之前,先触发一次原始类型的静态构造,这样避免静态扩展的成员在原始成员之前被注入
         DomainObject.StaticConstructor(objectType);
         var extensionTypes = info.Value;
         foreach (var extensionType in extensionTypes)
         {
             //触发扩展类型的静态构造函数
             DomainObject.StaticConstructor(extensionType);
         }
     }
 }
 internal static void Initialize()
 {
     //主动触发静态构造
     foreach (var info in _types)
     {
         var derivedType = info.Value;
         var inheriteds  = derivedType.GetInheriteds();
         foreach (var baseType in inheriteds)
         {
             if (!DomainObject.IsDomainObject(baseType))
             {
                 continue;
             }
             //我们在触发扩展类型的静态构造之前,先触发一次原始类型的静态构造,这样避免静态扩展的成员在原始成员之前被注入
             DomainObject.StaticConstructor(baseType);
         }
         //触发派生类型的静态构造函数
         DomainObject.StaticConstructor(derivedType);
     }
 }