首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >抽象接口

抽象接口
EN

Stack Overflow用户
提问于 2012-05-29 23:57:36
回答 1查看 101关注 0票数 1

在我的MVC3应用程序中,我试图创建一个通用类(名为DdlGet )来调用它来获取下拉列表(DDL)的记录。不过,下面的代码是按预期做的,但我认为我过度使用了泛型类型T--特别是下面用'//**‘表示的行

我的控制器中有以下代码

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
public class StatusTypeRepository : IStatusTypeRepository, IGeneralReferenceRepository<StatusType>
{
    ...
    public IQueryable<StatusType> All
    {
        get { return context.StatusTypes; }
    }

我有一个接口(它对应于上面调用的All方法)

代码语言:javascript
运行
复制
public interface IGeneralReferenceRepository<T>
{
    IQueryable<T> All { get; }
}

和一个帮助类,以获取下拉列表记录并放置到SelectList中。

代码语言:javascript
运行
复制
public class Helper<T>
{
   public static SelectList DdlGet(IGeneralReferenceRepository<T> generalReferenceRepository)
   {
       return new SelectList(generalReferenceRepository.All, ...);
   }
}

我遇到的问题是上面第一个代码块中指示的行,即对填充SelectList的最终实现的调用。

代码语言:javascript
运行
复制
indexViewModel.StatusTypes = Helper<StatusType>.DdlGet(statusTypeRepository); 

正如上面在注释(前缀为//**)中解释的那样,它传递一个泛型statusTypeRepository,它通过行定义类型:-

代码语言:javascript
运行
复制
private readonly IGeneralReferenceRepository<StatusType> statusTypeRepository;

不过,我已经在Helper泛型类(即Helper类)中定义了该类型。

我的问题是,我可以从另一个派生出一个,而不是在调用中两次指定泛型。也就是说,我是否可以从Helper类类型派生statusTypeRepository中指定的类型,反之亦然?

非常感谢

特拉维斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-30 00:17:38

与其在Helper类中使用类型参数,不如将其放在下面的方法上:

代码语言:javascript
运行
复制
public class Helper
{
    public static SelectList DdlGet<T>(IGeneralReferenceRepository<T> generalReferenceRepository)
    {
        return new SelectList(generalReferenceRepository.All, ...);
    }
}

那你就可以

代码语言:javascript
运行
复制
indexViewModel.StatusTypes = Helper.DdlGet(statusTypeRepository); 

编译器将处理类型推断。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10808328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档