/// <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); } }