验证服务描述符时出错ServiceType:INewsRepository生存期:Singleton ImplementationType:NewsRepository': [英] Error while validating the service descriptor 'ServiceType: INewsRepository Lifetime: Singleton ImplementationType: NewsRepository':

查看:30
本文介绍了验证服务描述符时出错ServiceType:INewsRepository生存期:Singleton ImplementationType:NewsRepository':的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用存储库模式从数据库中获取数据 我有3个项目

Bmu.Mode‘这是用于模型创建数据库’

Bmu.Repo‘它有两个文件夹用于存储库,包括Contact/INewRepository.cs’和用于实现接口‘Repository/NewsRepository’。

Bmu.Api用于从Repo项目调用数据

模型项目中的新闻类

namespace bmu.model
{
   public class News
   {
    public int Id { get; set; }

    public string SubTitle { get; set; }

    public string Title { get; set; }

    public string Summery { get; set; }
  }
}

模型项目中的上下文类

namespace bmu.model
 {
   public class BmuContext : DbContext
    {
       public BmuContext(DbContextOptions<BmuContext> options): base(options)
      {

      }
    public DbSet<News> News { get; set; }
   }
}

我在回购项目中的界面

namespace bmu.repo.Contracts
{
  public interface INewsRepository
  {
    Task<IEnumerable<News>> GetAllAsync();
    Task<IEnumerable<News>> GetAllActiveAsync();
  }
}

在bmu.repo中实现接口

namespace bmu.repo.IRepository
{
 public class NewsRepository : INewsRepository
 {
    private readonly BmuContext _context;
    private readonly MemoryCache _memoryCache;

    public NewsRepository(BmuContext context, MemoryCache memoryCache)
    {
        _context = context;
        _memoryCache = memoryCache;
    }
    public async Task<IEnumerable<News>> GetAllAsync()
    {
        return await _context.News.ToListAsync(); 
    }
    public async Task<IEnumerable<News>> GetAllActiveAsync()
    {
      return   await _context.News.Where(x => x.Active).ToListAsync();
    }

}
}

还添加

services.AddControllers(); 
        services.AddSingleton<INewsRepository, NewsRepository>();

在Api项目启动中 这是我的控制器

namespace bmu.api.Controllers
{
[ApiController]
[Route("[controller]")]
public class NewsController : ControllerBase
{
     private readonly ILogger<NewsController> _logger;
     private readonly INewsRepository _newsRepository;

    public NewsController(ILogger<NewsController> logger,INewsRepository newsRepository)
    {
        _logger = logger;
        _newsRepository = newsRepository; 
    }
    [HttpGet]
    public async Task<IEnumerable<News>> Get()
    {
        return await _newsRepository.GetAllActiveAsync();
    }
}
}

但在运行项目时出现此错误

AggregateException:无法构造某些服务(验证服务描述符‘ServiceType:bmu.repo.Contracts.INewsRepository Lifetime:Singleton ImplementationType:bmu.repo.IRepository.NewsRepository’时出错):尝试激活‘bmu.repo.IRepository.NewsRepository’时,无法解析类型为‘bmu.Model.BmuContext’的服务。

也因为有多个项目,所以用这个添加DbContext

更新:

namespace bmu.model
{
public class BmuContextFactory : IDesignTimeDbContextFactory<BmuContext>
{
    public BmuContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<BmuContext>();
        optionsBuilder.UseSqlite("Data Source=bmu.db");

        return new BmuContext(optionsBuilder.Options);
    }
}
}

是否有解决此错误的方法?

推荐答案

是因为

    private readonly IMemoryCache _memoryCache;

当我取下它时,每个人都认为工作正常

这篇关于验证服务描述符时出错ServiceType:INewsRepository生存期:Singleton ImplementationType:NewsRepository&#39;:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆