Example #1
0
        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);
                }
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
        //初始化类型别名
        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);
            }
        }
Example #5
0
        //初始化对象
        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);
                        }
                    }
                }
            }
        }
Example #6
0
        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);
            }
        }
Example #7
0
        //初始化常量
        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);
            }
        }