/// <summary>
        ///     Get the implementation for the given Enum
        /// </summary>
        /// <param name="eEnum"></param>
        /// <returns></returns>
        public new INotification Get(NotificationTypeEnum eEnum)
        {
            INotification value;

            if (!AllImplementations.TryGetValue(eEnum, out value))
            {
                throw new InvalidEnumArgumentException();
            }
            if (!value.IsAvailable())
            {
                throw new InvalidEnumArgumentException(@"Can't be selected");
            }
            return(value);
        }
 protected override IReadOnlyDictionary <NotificationTypeEnum, INotification> DataSource()
 {
     return(AllImplementations.Where(pair => pair.Value.IsAvailable()).ToDictionary(pair => pair.Key, pair => pair.Value));
 }