예제 #1
0
        T EntityOf <T>(CXCursor cursor, Func <T> creator) where T : Entity
        {
            Entity e;
            var    key = new CursorKey(cursor);

            if (_CursorToEntity.TryGetValue(key, out e))
            {
                var t = e as T;
                if (t == null)
                {
                    throw new ApplicationException(string.Concat("\"", e.FullName, "\" class mismatch: ", e.GetType().Name, " vs ", typeof(T).Name));
                }
                return(t);
            }
            else
            {
                var t = _EntityBinder.Entity <T>(cursor, creator);
                if (t == null)
                {
                    return(null);
                }
                t.Depth = _Depth;
                _CursorToEntity.Add(key, t);
                return(t);
            }
        }