首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从以接口为参数的类中调用方法?

如何从以接口为参数的类中调用方法?
EN

Stack Overflow用户
提问于 2019-11-11 20:31:10
回答 2查看 68关注 0票数 0

在单元测试中,我需要调用以下类中的GetAvailableProducts方法:

代码语言:javascript
复制
public class ProductProvider : IProductProvider
{
    private readonly IProductService _service;
    private readonly IElasticSearchService _elasticSearchService;

    public ProductProvider(IProductService service, IElasticSearchService elasticSearchService)
    {
        _service = service;
        _elasticSearchService = elasticSearchService;
    }

    public PageResult<Product> GetAvailableProducts(ProductSearchRequest request)
    {
        return _elasticSearchService.GetProducts(request);
    }
}

问题是这个类接受接口作为参数,我不知道如何正确地实例化它。我尝试过以下几种方法:

代码语言:javascript
复制
public static class Searcher
{
    private static readonly IProductService _service;
    private static readonly IElasticSearchService _elasticSearchService;
    private static readonly IProductProvider _pp = new ProductProvider(_service, _elasticSearchService);

    public static PageResult<Product> GetData()
    {
        ...

        return _pp.GetAvailableProducts(request);
    }
}

当调试器到达_elasticSearchService.GetProducts(request)时,它当然会为_elasticSearchService抛出一个“空对象引用”错误。如何正确地实例化这个类?

EN

回答 2

Stack Overflow用户

发布于 2019-11-11 20:42:58

您应该在自定义类中实现接口(IProductService、IElasticSearchService),然后将这些类引用到ProductProvider的ctor。在引用它们之前,在Searcher类中创建IElasticSearchService和IProductService的实例

票数 0
EN

Stack Overflow用户

发布于 2019-11-11 20:46:55

不能直接实例化接口,但可以将对象声明为接口,然后将其实例化为实现该接口的任何类。

而且,您的新ProductProvider正在使用搜索器类上的空_elasticSearchService进行初始化。

如下所示:

代码语言:javascript
复制
private static readonly IElasticSearchService _elasticSearchService = new ClassImplementingElasticSearchServiceInterface(); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58801406

复制
相关文章

相似问题

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