c# - 尝试激活时无法解析服务类型

标签 c# asp.net-core dependency-injection asp.net-core-mvc

在我的 ASP.NET Core 应用程序中,出现以下错误:

InvalidOperationException: Unable to resolve service for type 'Cities.Models.IRepository' while attempting to activate 'Cities.Controllers.HomeController'.

我是 HomeController 我正在尝试将 Cities getter 传递给 View ,如下所示:

public class HomeController : Controller
{
    private readonly IRepository repository;

    public HomeController(IRepository repo) => repository = repo;

    public IActionResult Index() => View(repository.Cities);
}

我有一个文件 Repository.cs,其中包含一个接口(interface)及其实现,如下所示:

public interface IRepository
{
    IEnumerable<City> Cities { get; }
    void AddCity(City newCity);
}

public class MemoryRepository : IRepository
{
    private readonly List<City> cities = new List<City>();

    public IEnumerable<City> Cities => cities;

    public void AddCity(City newCity) => cities.Add(newCity);
}

我的 Startup 类包含模板中默认生成的代码。我做了任何更改:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        ...
    }
}

最佳答案

要让依赖注入(inject)框架解析IRepository,它必须首先注册到容器中。例如,在 ConfigureServices 中,添加以下内容:

services.AddScoped<IRepository, MemoryRepository>();

对于 .NET 6+,它使用 new hosting model默认情况下,在 Program.cs 中添加以下内容:

builder.Services.AddScoped<IRepository, MemoryRepository>();

AddScoped 只是 service lifetime 的一个示例:

For web applications, a scoped lifetime indicates that services are created once per client request (connection).

参见 docs有关 ASP.NET Core 中依赖注入(inject)的更多信息。

关于c# - 尝试激活时无法解析服务类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930090/

相关文章:

c# - 是否可以创建使用 C# 或 C++ 代码的 Firefox 插件?如果是这样,如何?

c# - NHibernate 的二级缓存和模式更改的错误

c# - 当函数属于必须解析的类时,如何向 IServiceCollection 注册委托(delegate)或函数?

java - 使用 Guice 注入(inject)泛型

c# - 使用 Azure Functions 自动将 Excel 保存为 CSV

c# - 如何从 MEF 容器中释放共享实例

javascript - “Promise”是 Aurelia 的 ASP.NET Core SPA 模板中的未定义错误

c# - 净核心 ILogger 值不能为空

asp.net-core - .NET Core 1.0 和 EntityFramework 7 不兼容

asp.net-mvc - 在 Controller 上使用依赖注入(inject)进行单元测试