internal virtual void InitConstAliases(ObjectNamespace space, IObjectNamespaceSetting setting) { if (setting.ConstAliases == null || setting.ConstAliases.Length <= 0) { return; } var aliases = space.ConstAliases; var aliasesGlobal = this.globalObjectNamespace.ConstAliases; var spaceName = space.Name; var preName = spaceName; if (!string.IsNullOrEmpty(preName)) { preName += "."; } foreach (var constSetting in setting.ConstAliases) { var name = constSetting.Name; var value = Convert.ChangeType(constSetting.Value, TypeHelper.CreateType(this.GetTypeNameInternal(constSetting.TypeName, spaceName), true)); aliases.Add(name, value); if (space != this.globalObjectNamespace) { aliasesGlobal.Add(preName + name, value); } } }
internal virtual void InitNamespace(IObjectNamespaceSetting spaceSetting, string parentName, Dictionary <ObjectNamespace, IObjectNamespaceSetting> list) { var spaceName = spaceSetting.Name; if (!string.IsNullOrEmpty(parentName)) { spaceName = parentName + "." + spaceName; } if (!this.objectNamespaces.ContainsKey(spaceName)) { var space = new ObjectNamespace(spaceName); this.objectNamespaces.Add(spaceName, space); list.Add(space, spaceSetting); } var spaceSettings = spaceSetting.ObjectNamespaces; if (spaceSettings == null || spaceSettings.Length <= 0) { return; } foreach (var setting in spaceSettings) { this.InitNamespace(setting, spaceName, list); } }
internal virtual void InitTypeAliases(ObjectNamespace space, IObjectNamespaceSetting setting) { if (setting.TypeAliases == null || setting.TypeAliases.Length <= 0) { return; } var aliases = space.TypeAliases; var aliasesGlobal = this.globalObjectNamespace.TypeAliases; var preName = space.Name; if (!string.IsNullOrEmpty(preName)) { preName += "."; } foreach (var typeSetting in setting.TypeAliases) { var name = typeSetting.Name; var value = typeSetting.TypeName; aliases.Add(name, value); if (space != this.globalObjectNamespace) { aliasesGlobal.Add(preName + name, value); } } }
//初始化类型别名 private static void InitTypeAliases(IObjectNamespace space, IObjectNamespaceSetting setting) { if (space == null || setting == null || setting.TypeAliases == null || setting.TypeAliases.Length <= 0) { return; } var aliases = space.TypeAliases; foreach (var typeSetting in setting.TypeAliases) { var typeName = typeSetting.TypeName; if (string.IsNullOrEmpty(typeName)) { continue; } var type = TypeHelper.CreateType(typeName, false); if (type == null) { continue; } var name = typeSetting.Name; aliases.Add(name, type); } }
//初始化对象 private void InitObjectAliases(ObjectNamespace space, IObjectNamespaceSetting setting, Func <Type, IObjectContainer> predicate) { if (space == null || setting == null || setting.Objects == null || setting.Objects.Length <= 0) { return; } foreach (var objectSetting in setting.Objects) { var objectType = this.GetOrCreateType(objectSetting.TypeName); if (objectType == null) { continue; } var objectName = objectSetting.Name; var container = predicate(objectType); if (container == null) { var lifetimeTypeName = objectSetting.Lifetime; if (!string.IsNullOrEmpty(lifetimeTypeName)) { var lifetimeType = this.GetOrCreateType(lifetimeTypeName); container = (IObjectContainer)TypeHelper.CreateObject(lifetimeType, typeof(IObjectContainer), false); } } if (container == null) { container = ObjectContainer.CreateDefault(); } space.AddObject(objectName, container); //GetObject(aliasName)时可返回 space.AddObject(objectType, container); //GetObject<>时可返回 IObjectBuilder objectBuilder = null; var builderName = objectSetting.Builder; if (!string.IsNullOrEmpty(builderName)) { objectBuilder = ((IObjectService)this).GetObject <IObjectBuilder>(builderName); } if (objectBuilder == null) { objectBuilder = this.ObjectBuilder; } var description = ObjectDescription.CreateFromSetting(this, objectType, objectSetting); container.Init(description, objectBuilder); //查找此类型实现的接口 var interfaces = objectType.GetInterfaces(); if (interfaces.Length > 0) { foreach (var ifType in interfaces) { if (ifType.IsDefined(typeof(ServiceAttribute), true)) { space.AddObject(ifType, container); } } } } }
internal virtual void InitObjectAliases(ObjectNamespace space, IObjectNamespaceSetting spaceSetting, Func <Type, ILifetimeContainer> predicate) { if (spaceSetting.ObjectSettings == null || spaceSetting.ObjectSettings.Length <= 0) { return; } var spaceName = space.Name; var preName = spaceName; if (!string.IsNullOrEmpty(preName)) { preName += "."; } foreach (var objectSetting in spaceSetting.ObjectSettings) { var objectTypeName = this.GetTypeNameInternal(objectSetting.TypeName, spaceName); var objectType = TypeHelper.CreateType(objectTypeName, true); var objectName = objectSetting.Name; var container = predicate(objectType); if (container == null) { if (objectSetting.Lifetime != null && !string.IsNullOrEmpty(objectSetting.Lifetime.TypeName)) { var lifetimeContainerTypeName = this.GetTypeNameInternal(objectSetting.Lifetime.TypeName, spaceName); container = (ILifetimeContainer)TypeHelper.CreateObject(lifetimeContainerTypeName, typeof(ILifetimeContainer), true); } else { container = LifetimeContainer.CreateDefault(); } this.globalObjectNamespace.TypedObjects.Add(objectType, container); } space.TypedObjects.Add(objectType, container); space.ObjectAliases.Add(objectName, container); if (this.globalObjectNamespace != space) { this.globalObjectNamespace.ObjectAliases.Add(preName + objectName, container); } container.Init(objectSetting, this.ObjectBuilder); } }
//初始化常量 private void InitConstAliases(IObjectNamespace space, IObjectNamespaceSetting setting) { if (space == null || setting == null || setting.ConstAliases == null || setting.ConstAliases.Length <= 0) { return; } var aliases = space.ConstAliases; foreach (var constSetting in setting.ConstAliases) { var type = this.GetOrCreateType(constSetting.TypeName); if (type == null) { continue; } var value = Convert.ChangeType(constSetting.Value, type); var name = constSetting.Name; aliases.Add(name, value); } }