private ItemCreateInfo(StoreObjectType type, Schema schema, AcrProfile acrProfile, ItemCreateInfo.ItemCreator creator)
 {
     this.Type       = type;
     this.Schema     = schema;
     this.AcrProfile = acrProfile;
     this.Creator    = creator;
 }
        internal static T ConstructItem <T>(StoreSession session, StoreObjectId id, byte[] changeKey, ICollection <PropertyDefinition> propertiesToLoad, ItemBuilder.PropertyBagCreator propertyBagCreator, ItemCreateInfo.ItemCreator creator, Origin origin, ItemLevel itemLevel) where T : Item
        {
            PersistablePropertyBag persistablePropertyBag = null;
            CoreItem coreItem = null;
            T        t        = default(T);
            bool     flag     = false;
            T        result;

            try
            {
                persistablePropertyBag = propertyBagCreator();
                coreItem = new CoreItem(session, persistablePropertyBag, id, changeKey, origin, itemLevel, propertiesToLoad, ItemBindOption.None);
                t        = (T)((object)creator(coreItem));
                flag     = true;
                result   = t;
            }
            finally
            {
                if (!flag)
                {
                    Util.DisposeIfPresent(t);
                    Util.DisposeIfPresent(coreItem);
                    Util.DisposeIfPresent(persistablePropertyBag);
                }
            }
            return(result);
        }