本文介绍了验证服务描述符时出错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';:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!