使用接口时没有触发方法[复制]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用接口时没有触发方法[复制]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我正在使用Asp.net web api和调用另一个正常工作的类库的方法。为了实现Redis缓存,我改为class to interface。在这种情况下,不会触发类库中的方法。我收到以下错误“对象引用未设置为对象的实例。”,“ExceptionType”:“System.NullReferenceException”,“StackTrace”

public class ArticleListingController : ApiController
    {
        public IArticleProvider _newsarticleProvider { get; set; }
        [HttpGet]
        [Route("Listing")]
        public IHttpActionResult GetArticlesListing(string sectionName, int RegionId, int Count)
        {
            List<Article> articleList = new List<Article>();
            if (!string.IsNullOrEmpty(RegionId.ToString()))
            {
                if (articleList != null)
                {
                    articleList = _newsarticleProvider.GetArticleListBySectionName(sectionName, RegionId, Count, ListingArticleCache);
                    return Ok(articleList);
                }
            }
            return NotFound();
        }
}

在提供者接口代码中

public interface IArticleProvider
{
        List<Article> GetArticleListBySectionName(string sectionName, int RegionId, int Count, int CacheTime);
 }

在提供者代码中

public class ArticleProvider 
    {

    public List<Article> GetArticleListBySectionName(string sectionName, int RegionId, int Count, int CacheTime)
    {return _articleRepositary.GetArticleListBySectionName(sectionName, RegionId, Count, CacheTime);              
     }
 }
答案

首先,你的班级ArticleProvider没有实现你的界面IArticleProvider。然后,您需要创建一个类型为ArticleProvider的实例,其引用类型为IArticleProvider。

IArticleProvider _newsarticleProvider = new ArticleProvider();

假设您使用某种DI容器。如果您这样做,则需要注册您的提供商。根据您使用的容器,语法可能会有所不同。如果您使用DI解析程序注册了提供程序,则不再需要创建已解析类型的实例,并且可以在整个应用程序中使用它。只需使用类构造函数注入它:

    public class ArticleListingController : ApiController
    {
         private readonly IArticleProvider _newsarticleProvider;
         public ArticleListingController(IArticleProvider newsarticleProvider)
         {
             _newsarticleProvider = newsarticleProvider ?? throw new ArgumentNullException(nameof(newsarticleProvider));  
         }
     }
另一答案

看起来你的_newsarticleProvider没有实例化。

检查配置以确保正确设置依赖项注入。如果您不使用DI,请确保在控制器的构造函数中实例化您的提供程序。

以上是关于使用接口时没有触发方法[复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥错误处理程序触发时没有错误? [复制]

片段 getActivity() 与接口回调?

Promise then() 方法没有按预期触发? [复制]

当我在导航抽屉中使用带有发送片段的 EditText 时,无法解析片段中的方法“findViewById”? [复制]

点击通知时Activity中的触发方法

前端防扒代码片段