在我的 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/