在我的 MVC3 应用程序中,我试图创建一个通用类(下面名为 DdlGet)来调用它来获取下拉列表(DDL)的记录。下面的代码按预期执行,但我认为我过度使用通用类型 T - 特别是下面用“// * *”指示的行
我的控制器中有以下代码
private readonly IGeneralReferenceRepository<StatusType> statusTypeRepository;
...
public StatusController() : this(...new StatusTypeRepository()) {}
public StatusController(...IGeneralReferenceRepository<StatusType> statusTypeRepository)
{
...
this.statusTypeRepository = statusTypeRepository;
}
...
public ViewResult Index()
{
...
//**** The line below passes a variable (statusTypeRepository) of the Generic
//**** type (StatusType) and additionally calls the class (Helper<StatusType>)
//**** with the Generic
indexViewModel.StatusTypes = Helper<StatusType>.DdlGet(statusTypeRepository);
然后在我的存储库中(这定义了从数据库[通过实体框架方法]获取 DDL 记录的实现) - 请注意通用参考通用接口(IGeneralReferenceRepository)
public class StatusTypeRepository : IStatusTypeRepository, IGeneralReferenceRepository<StatusType>
{
...
public IQueryable<StatusType> All
{
get { return context.StatusTypes; }
}
我有一个接口(对应于上面调用的 All 方法)
public interface IGeneralReferenceRepository<T>
{
IQueryable<T> All { get; }
}
和一个帮助类来获取下拉列表记录并放入 SelectList
public class Helper<T>
{
public static SelectList DdlGet(IGeneralReferenceRepository<T> generalReferenceRepository)
{
return new SelectList(generalReferenceRepository.All, ...);
}
}
我遇到的问题是上面第一个代码块中指示的行 - 即对填充 SelectList 的最终实现的调用
indexViewModel.StatusTypes = Helper<StatusType>.DdlGet(statusTypeRepository);
正如上面注释中所解释的(以 // * * 为前缀),它传递了一个 Generic statusTypeRepository,它通过以下行定义类型:-
private readonly IGeneralReferenceRepository<StatusType> statusTypeRepository;
但是我已经在 Helper Generic 类中定义了类型(即 Helper 类)
我的问题是我可以从另一个派生一个而不是在调用中两次指定泛型。即我可以从 Helper 类类型派生 statusTypeRepository 中指定的类型,反之亦然
非常感谢
特拉维斯