Item AddItem(IBxReferableElement val) { Item item = new Item(_items.Count, _nodeVS.CreateChildNode(BxSSL.nodeVItem + _items.Count.ToString())); item.Value = val; _items.Add(item); return(item); }
//public BxCompoundRefer(IBxCompound container, IBxElementCarrier carrier) // : base(container, carrier) //{ //} #endregion #region IBxElementReferSite 成员 public virtual void ReferTo(IBxReferableElement val) { if (!(val is T)) { throw new Exception("object referred must be type of " + typeof(T).Name); } if (object.ReferenceEquals(null, _value)) { _value.BreakRefer(this); } _value = val as T; _value.AddRefer(this); }
public virtual void ReferTo(IBxReferableElement val) { if (!(val is T)) { throw new Exception("object referred must be type of " + typeof(T).Name); } ReferToEx(val as T); //if (!object.ReferenceEquals(null, _value)) // _value.BreakRefer(this); //_value = val as T; //_value.AddRefer(this); //if (_value is IBxElementInit) // (_value as IBxElementInit).InitCarrier(_carrier); }
public void Load(IBxStorageNode nodeSva) { _nodeSva = nodeSva; _nodeVS = null; _items = null; _tSaver = null; IBxStorageNode nodeTS = _nodeSva.GetChildNode(BxSSL.nodeTS); if (nodeTS != null) { _tSaver = new BxSvaTypeSaver(); _tSaver.Load(nodeTS); } _nodeVS = _nodeSva.GetChildNode(BxSSL.nodeVS); if (_nodeVS != null) { _items = new List <Item>(); IEnumerable <IBxStorageNode> childs = _nodeVS.ChildNodes; int index = 0; Item temp = null; string id = null; Type type = null; IBxReferableElement tempVal = null; foreach (IBxStorageNode one in childs) { temp = new Item(index, one); index++; _items.Add(temp); if (one.HasElement(BxSSL.elementTypeID)) { id = one.GetElementValue(BxSSL.elementTypeID); type = _tSaver.Get(id); tempVal = type.GetConstructor(null).Invoke(null) as IBxReferableElement; temp.Value = tempVal; } } } }
public string SaveValue(IBxReferableElement val) { Item item = GetItem(val); if (item != null) { return(item.Index.ToString()); } item = AddItem(val); IBxStorageNode node = item.Node; if (val is IBxPersistStorageNode) { (val as IBxPersistStorageNode).SaveStorageNode(node); } if (val.Owner == null) { string typeID = TSaver.Add(val.GetType()); node.SetElement(BxSSL.elementTypeID, typeID); } return(item.Index.ToString()); }
public void LoadValue(IBxReferableElement val, string id) { Item item = GetItem(id); if (item == null) { throw new Exception("find share value " + id.ToString() + " failed!"); } if (item.Value != null) { throw new Exception("a shared value is loaded more than once!"); } item.Value = val; (val as IBxPersistStorageNode).LoadStorageNode(item.Node); if (item.Refers != null) { foreach (IBxElementReferer one in item.Refers) { one.ReferTo(val); } item.CLearRefers(); } }
public Item(int index, IBxStorageNode node) { _index = index; _val = null; _node = node; }
Item GetItem(IBxReferableElement val) { return(_items.Find(x => x.Value == val)); }