/// <summary>
        /// Report that particular operation is done on TEntity
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="operation"></param>
        /// <param name="entity"></param>
        public static void OperationDone <TEntity>(Operation operation, TEntity entity) where TEntity : class
        {
            // get suject of TEntity
            Subject <TEntity> subject = SubjectFactory.GetSubject <TEntity>();

            // if exist
            if (subject != null)
            {
                // switch to operator, call event handler
                switch (operation)
                {
                case Operation.Create:
                {
                    subject.OnCreationDone(entity);
                    break;
                }

                case Operation.Update:
                {
                    subject.OnUpdateDone(entity);
                    break;
                }

                case Operation.Delete:
                {
                    subject.OnDeleteDone(entity);
                    break;
                }
                }
            }
        }
 /// <summary>
 /// Get subject
 /// </summary>
 /// <param name="entityType"></param>
 /// <returns></returns>
 public static ISubject GetSubject(Type entityType)
 {
     return(SubjectFactory.GetSubject(entityType));
 }
 /// <summary>
 /// Get entity subject
 /// </summary>
 /// <typeparam name="TEntity"></typeparam>
 /// <returns></returns>
 public static Subject <TEntity> GetSubject <TEntity>() where TEntity : class
 {
     return(SubjectFactory.GetSubject <TEntity>());
 }