public StillOneScriptCore.EntityModel.LngObjectsModel._Instance Convert(object value)
        {
            lock (LockObj)
            {
                if(value == null)
                {
                    if (mNullInstance != null)
                    {
                        return mNullInstance;
                    }
                }
                else
                {
                    // disable once CanBeReplacedWithTryCastAndCheckForNull
                    if(value is StillOneScriptCore.EntityModel.LngObjectsModel._Instance)
                    {
                        return value as StillOneScriptCore.EntityModel.LngObjectsModel._Instance;
                    }

                    if (mObjectCache.ContainsKey(value))
                    {
                        return mObjectCache[value];
                    }
                }

                var tmpConvertor = GetConvertor(value);

                if (tmpConvertor == null)
                {
                    return null;
                }

                var tmpOriginValue = value;

                if(value != null)
                {
                    var tmpValType = value.GetType();

                    var tmpWrappedType = GetWrappingConvertor(tmpValType);

                    if (tmpWrappedType != null)
                    {
                        value = Activator.CreateInstance(tmpWrappedType, new object[] { value });
                    }
                }

                var tmpResult = tmpConvertor.CreateInstance(value);

                if (value == null)
                {
                    mNullInstance = tmpResult;
                }
                else
                {
                    mObjectCache.Add(tmpOriginValue, tmpResult);

                    var tmpIdenty = value as StillOneScriptCore.EntityModel.LngObjectsModel.Support.IIdenty;

                    if(tmpIdenty != null)
                    {
                        tmpIdenty._Object = tmpResult;
                    }
                }

                return tmpResult;
            }
        }
Пример #2
0
        public StillOneScriptCore.EntityModel.LngObjectsModel._Instance CreateInstanceByExistingBox(StillOneScriptCore.EntityModel.LngObjectsModel.Support.Internal._P_BaseInstace box)
        {
            lock (LockObj)
            {
                var tmpInstance = new StillOneScriptCore.EntityModel.LngObjectsModel._Instance();

                tmpInstance.Environment = this.Environment;

                if (box == null)
                {
                    tmpInstance.AddSuperClass(this);
                }
                else
                {
                    tmpInstance.AddSuperClass(this, box);
                }

                return tmpInstance;
            }
        }