【问题标题】:Generic interface with none generic object argument没有通用对象参数的通用接口
【发布时间】:2021-06-22 03:03:05
【问题描述】:

我怎样才能让我的存储库有一个通用接口,其中的搜索方法采用不同类型作为参数?

我试图给我的界面这个属性:

 Task<IEnumerable<T>> Search(object Query, int? limit);

例如,UsersController 希望在使用 IRepository&lt;User&gt; 时发送 SearchUserQuery(属性 id、name 和 phoneNumber)作为参数。但是 CompanyController 在使用 IRepository&lt;Company&gt; 时需要发送 SearchCompanyQuery(带有属性 guid、名称、税号)作为参数。

问题

当我将 Search 方法添加到存储库时(参见下面的示例),它不会将 SearchUserQuery 识别为对象,并给我编译错误。

 Task<IEnumerable<User>> Search(SearchUserQuery query, 100);

【问题讨论】:

    标签: c# oop interface


    【解决方案1】:

    您的实现方法与接口签名完全匹配

    如果查询不同,这必须反映在界面中:

    interface IRepository<T, TQuery>
    {
        Task<IEnumerable<T>> Search(TQuery query, int? limit);
    }
    

    然后你的实现:

    class UserRepository : IRepository<User, SearchUserQuery>
    {
        Task<IEnumerable<User>> Search(SearchUserQuery query, int? limit) // ...
    }
    

    【讨论】:

    • 谢谢,这是一个很好的答案!
    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2016-08-02
    相关资源
    最近更新 更多