У меня есть проблема в реализации общего хранилища - PullRequest
2 голосов
/ 19 мая 2019

Я хочу создать общий репозиторий, чтобы упростить его реализацию. Теперь я хочу создать интерфейс для использования его при внедрении зависимостей в моей доменной службе, но не могу

Я хочу создать общий репозиторийчтобы упростить реализацию. Я создал общий абстрактный репозиторий, который получает сущность и ее контекст. Теперь я хочу создать интерфейс для использования его при внедрении зависимостей в моей доменной службе

мой общий репозиторий:

 public abstract class Repository<T,K>:IRepository<T,K>
    {
        private Type t;
        private K _Context;
        private bool disposed = false;
        public Repository(K Context)
        {
            _Context = Context;
        }
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    _Context.Dispose();
                }
            }
            this.disposed = true;
        }
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        public void Delete(object id)
        {
            T t = _Context.Set<T>().Find(id);
            _Context.Set<T>().Remove(t);
        }

        public T Get(object id)
        {
            return _Context.Set<T>().Find(id);
        }

        public IEnumerable<T> getList()
        {
            return _Context.Set<T>().ToList();
        }

        public void insert(T t)
        {
            _Context.Set<T>().Add(t);
        }

        public void Save()
        {
            _Context.SaveChanges();
        }

        public  void Update(T t)
        {
            _Context.Entry(t).State = EntityState.Modified;
        }
    }
}

мой интерфейс репозитория:

    public interface IRepository<T,K> where T : BaseEntity where K : BaseContext<K>
    {
        T Get(object id);
        IEnumerable<T> getList();
        void insert(T t);
        void Delete(object id);
        void Update(T t);
        void Save();

    }

моя ошибка "the Type 'T' can not be used as type parameter 'T' in the generic type....The type 'T' cannot be used as type parameter 'T' in the generic type or method 'IRepository'. There is no boxing conversion or type parameter conversion from 'T' to 'DomainModel.BaseEntity", и я хочу знать, как я могу решить эту проблему

1 Ответ

2 голосов
/ 19 мая 2019

Вы должны поместить ограничения , где , в репозиторий классов , а также , т. Е .:

public abstract class Repository<T,K>:IRepository<T,K> where T : BaseEntity where K : BaseContext<K>

Это потому, что C # ничего не знает о T в репозитории , но ему необходимо удовлетворять критериям , где в IRepository

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...