两种实现模式,还是选择2,少一层继承。

 public class Model
    {
 
    }
 
 
    public interface IRepository<TEntity>
    {
        /// <summary>
        /// Gets entity by key.
        /// </summary>
        /// <typeparam name="TEntity">The type of the entity.</typeparam>
        /// <param name="keyValue">The key value.</param>
        /// <returns></returns>
        TEntity GetByKey(object keyValue);
    }
 
    public interface IRepository
    {
        /// <summary>
        /// Gets entity by key.
        /// </summary>
        /// <typeparam name="TEntity">The type of the entity.</typeparam>
        /// <param name="keyValue">The key value.</param>
        /// <returns></returns>
        TEntity GetByKey<TEntity>(object keyValue) where TEntity : class;
    }
 
 
    public class BaseRepository   : IRepository 
    {
 
        public TEntity GetByKey<TEntity>(object keyValue) where TEntity : class
        {
            throw new NotImplementedException();
        }
    }
 
    public class BaseRepository<T> : BaseRepository, IRepository<T> where T : class
    {
 
        public T GetByKey(object keyValue)
        {
            return this.GetByKey<T>(keyValue);
        }
    }
 
    public class BaseRepository2<T> : IRepository, IRepository<T> where T : class
    {
 
        public T GetByKey(object keyValue)
        {
            return this.GetByKey<T>(keyValue);
        }
 
        public TEntity GetByKey<TEntity>(object keyValue) where TEntity : class
        {
            throw new NotImplementedException();
        }
    }
 
 
 
 
 
    public interface IBiz
    {
        void Get();
    }
 
    class bbb : BaseRepository<Object>, IBiz
    {
 
        public void Get()
        {
            this.GetByKey(1);
            this.GetByKey<Model>(1);
        }
    }
 
原文地址:https://www.cnblogs.com/zbw911/p/2882634.html