说我有这个界面:
public interface IRepository<T> where T : Entity
{
T Get(string query);
void Save(T entity);
}
我有几个具体的类(当然,User和Project继承自Entity):
public class UserRepository : IRepository<User> { ... }
public class ProjectRepository : IProjectRepository<Project> { ... }
在单个集合中保留对所有这些内容的引用的最佳方法是什么?你显然不能有这样的东西:
var repos = new IRepository<Entity>[]
{
new UserRepository(),
new ProjectRepository()
}
所以必须我有一个通用接口继承的非通用接口?
public interface IRepository
{
Entity Get(string query);
void Save(Entity entity);
}
public interface IRepository<T> : IRepository { ... }
感谢您的任何帮助,想法和建议。
答案 0 :(得分:2)
由于IRepository<T>
出现在两个的输入和输出位置,因此T
界面并不能真正适用于共同或反向差异。你可以在这里做的最好的事情就是提供一个非通用的界面。
当然,你可以使用object
存储对任何类型的引用 - 但我猜你正在寻找比这更安全的东西。
答案 1 :(得分:1)
那么我必须有一个非通用接口,通用接口继承这个接口吗?
是。你可以在非泛型接口上放置更少的方法,如果你可以侥幸使用它:它取决于你想要做多少类型转换。 (例如,您可以将它们放在object[]
中。)