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); }
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); }