У меня есть этот метод:Общий метод Constraint ошибка - Рассмотреть использование явной реализации интерфейса вместо
public T GetRepositoryByType<T>() where T : IContextDependent
{
var instance = this.Repositories.SingleOrDefault(x => x is T);
return (T)instance;
}
Что нужно, чтобы иметь возможность вернуть любой экземпляр хранилища, который реализует IContextDependent
, так что я могу установить DbContext для каждого вручную.
Когда я строю я получаю эту ошибку:
Error CS0425 The constraints for type parameter 'T' of method 'RepositoryProvider.GetRepositoryByType()' must match the constraints for type parameter 'T' of interface method 'IRepositoryProvider.GetRepositoryByType()'. Consider using an explicit interface implementation instead.
Однако, если рассмотреть этот код из MSDN:
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>
{
T temp;
if (lhs.CompareTo(rhs) > 0)
{
temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Я не вижу никакой непосредственной разницы (если зависимость дальнейшие дженериков не надо?).
FYI, интерфейс довольно прост:
public interface IContextDependent
{
void SetContext(MyEntities context);
}
И интерфейс IRepositoryProvider:
public interface IRepositoryProvider
{
T GetRepositoryByType<T>();
}
Что вызывает ошибку?
Я добавил terface. Должен ли мой «IRepositoryProvider» наследовать от «IContextDependent», чем ?. – Spikee