コード例 #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();

            //远程服务的初始化
            RemoteService.Initialize();

            //领域事件宿主的初始化
            EventHost.Initialize();
        }
コード例 #2
0
        internal static void Cleanup()
        {
            RemoteService.Cleanup();

            EventHost.Cleanup();
        }