using CD67.ModeleMVC.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD67.ModeleMVC.Factory.Internal
{
    /// <summary>
    /// Classe de base pour toutes les classes spécialisées de la couche de service
    /// </summary>
    public class BaseFactory : IDisposable
    {
        /// <summary>
        /// Context Entity Framework utilisé dans la classe
        /// </summary>
        protected Entities dbContext;

        /// <summary>
        /// Constructeur sans argument pour les classes sans contexts Entity
        /// </summary>
        public BaseFactory() { }

        /// <summary>
        /// Constructeur avec initialisation du context Entity Framework
        /// </summary>
        /// <param name="JarvisContext">Jarvis Context Entity Framework</param>
        public BaseFactory(Entities dbContext)
        {
            this.dbContext = dbContext;
        }

        #region Dispose
        private bool disposed = false;

        /// <summary>
        /// Fonction pour détruire proprement la classe après utilisation
        /// </summary>
        /// <param name="disposing"></param>
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    dbContext.Dispose();
                }
            }
            this.disposed = true;
        }

        /// <summary>
        /// Fonction pour détruire proprement la classe après utilisation
        /// </summary>
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        #endregion
    }
}
