Example #1
0
        internal TO GetInternal <TO>(Guid _uid, IXObjectFactory <TKind> _factory) where TO : ClientXObject <TKind>
        {
            if (_factory == null && typeof(TO).IsAbstract)
            {
                var xFactoryAttribute = typeof(TO).GetCustomAttributes(typeof(XFactoryAttribute), true).Cast <XFactoryAttribute>().SingleOrDefault();
                if (xFactoryAttribute == null)
                {
                    throw new ApplicationException("Can't instantiate abstract type");
                }
                _factory = (IXObjectFactory <TKind>)Activator.CreateInstance(xFactoryAttribute.FactoryType);
            }

            ClientXObjectDescriptor <TKind> descriptor;

            if (m_descriptors.TryGetValue(_uid, out descriptor))
            {
                return(descriptor.Get <TO>(_factory));
            }
            var collectionOwnerUid = m_transport.GetСollectionOwnerUid(_uid);

            descriptor = new ClientXObjectDescriptor <TKind>(_uid, this, collectionOwnerUid);
            m_descriptors.Add(_uid, descriptor);
            var result = descriptor.Get <TO>(_factory);

            return(result);
        }
Example #2
0
        internal TO GetInternal <TO>(Guid _uid, IXObjectFactory <TKind> _factory, Guid _collectionOwnerUid)
            where TO : ClientXObject <TKind>
        {
            ClientXObjectDescriptor <TKind> descriptor;
            TO result;

            if (!m_descriptors.TryGetValue(_uid, out descriptor))
            {
                descriptor = new ClientXObjectDescriptor <TKind>(_uid, this, _collectionOwnerUid);
                m_descriptors.Add(_uid, descriptor);
                result = descriptor.Get <TO>(_factory);
            }
            else
            {
                if (!descriptor.ContainsInstanceOf(out result))
                {
                    result = descriptor.Get <TO>(_factory);
                }
            }
            return(result);
        }