【问题标题】:Some services are not able to be constructed Core 5.0部分服务无法构建 Core 5.0
【发布时间】:2022-01-11 21:05:54
【问题描述】:

当我构建我的项目时,一切都很好,但是当我在浏览器中运行它时,我从 Program.cs 文件中得到以下错误。我也在 Startup.cs 中添加了该服务。如果我在 Controller 中注释掉 INewsModelfactory 引用,它会运行,但我不明白我错过了什么会引发错误。

1 个,共 1 个

System.AggregateException: '无法构造某些服务(验证服务描述符时出错'ServiceType: websiteName.Web.Factories.INewsModelFactory Lifetime: Scoped ImplementationType: websiteName.Web.Factories.NewsModelFactory':尝试激活“websiteName.Web.Factories.NewsModelFactory”时无法解析类型“websiteName.Services.News.INewsService”的服务。)”

2 个,共 2 个

InvalidOperationException:尝试激活“websiteName.Web.Factories.NewsModelFactory”时无法解析类型“websiteName.Services.News.INewsService”的服务。

我想我已经添加了所涉及的所有内容,如果还需要任何其他内容,请告诉我。

控制器

public async Task<IActionResult> List()
{
    var model = await _newsModelFactory.PrepareNewsItemListModelAsync();

    return View(model);
}

INewsModelFactory

NewsItemModel PrepareNewsItemModelAsync(NewsItemModel model, NewsItem newsItem);

NewModelFactory

private readonly INewsService _newsService;

public NewsModelFactory(INewsService newsService)
{
    _newsService = newsService;
}
public async Task<NewsItemListModel> PrepareNewsItemListModelAsync()
{
    var newsItems = await _newsService.GetAllNewsAsync();

    var model = new NewsItemListModel
    {
        NewsItems =  newsItems.Select(newsItem =>
        {
            var newsModel = new NewsItemModel();
            PrepareNewsItemModelAsync(newsModel, newsItem);
            return newsModel; 

        }).ToList()
    };
    return model; 
}

新闻服务

public async Task<IEnumerable<NewsItem>> GetAllNewsAsync()
{
    var news = await _db.NewsItems.ToListAsync();

    return news;
}

DbContext

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) {}
    
    public DbSet<NewsItem> NewsItems { get; set; }      
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    . . .  
    
    services.AddScoped<INewsModelFactory, NewsModelFactory>();  
    services.AddScoped<INewsService,NewsService>();                 
}

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-core


    【解决方案1】:

    注入服务的顺序应该颠倒。您需要先注入 NewsService。因为 NewModelFactory 需要在其构造函数中使用它。当代码尝试初始化 NewFactoryModel 时,它在其构造函数中所需的 INewsService 尚未被注入。

    您需要将 Startup/ConfigureServices 中的行颠倒过来。

    Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
    . . .  
        services.AddScoped<INewsService,NewsService>();   
        services.AddScoped<INewsModelFactory, NewsModelFactory>();            
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 1970-01-01
      • 2022-01-21
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 2015-11-14
      • 2015-04-09
      相关资源
      最近更新 更多