2016-04-18 2 views
0

У меня есть интерфейс, как показано ниже:Как я могу заставить реализованный класс использовать объект, который имеет определенный параметр?

public interface IRepository<T> where T : class 
{ 

T является типом моих сущностей.
В этом интерфейсе есть несколько методов, которые будут использовать свойство Id Entity. Итак, как я могу гарантировать, что Объект имеет свойство Id, когда какой-то орган хочет реализовать этот интерфейс?

ответ

3

Интерфейсы на помощь!

Определить интерфейс следующим образом:

// Why IEquatable<T>? Because you don't want identifiers that may not 
// be able to prove that they're equal or not. Most commonly used 
// types used as identifiers already implement IEquatable<T>. For example: 
// int, Guid... 
public interface ICanBeIdentifiable<TId> where TId : IEquatable<TId> 
{ 
    TId Id { get; } 
} 

... и изменить свой репозиторий интерфейса подписи следующим образом тоже:

public interface IRepository<T> where T : class, ICanBeIdentifiable<Guid> 
... 

... или если вы хотите, чтобы полностью открыть дверь любой тип идентификатора:

public interface IRepository<TId, T> 
      where TId : IEquatable<TId> 
      where T : class, ICanBeIdentifiable<TId> 

Основным недостатком является то, что ваши объекты домена должны реализовать весь новый интерфейс, но это стоит усилий.

1

Вы можете добавить дополнительный интерфейс, который будет толкать каждый объект, чтобы иметь свойство ИД

public interface IEntity 
{ 
    int Id { get; set; } 
} 

public interface IRepository<T> where T : class, IEntity 
{ 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^