【发布时间】:2017-09-04 19:00:51
【问题描述】:
我一直在为这个错误苦苦挣扎,不明白为什么:
在尝试激活“Zipcode_Service.Models.ZipcodeContext”时,无法解析“Microsoft.Extensions.Configuration.IConfigurationRoot”类型的服务。
我尝试查看所有正在重新配置连接的地方,一切似乎都很好:
邮政编码上下文:
public ZipcodeContext(IConfigurationRoot config, DbContextOptions options) : base(options)
{
_config = config;
}
public DbSet<City> Cities { get; set; }
public DbSet<Zipcode> Zipcodes { get; set; }
public DbSet<Street> Streets { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer(_config["ConnectionStrings:ZipcodeContextConnection"]);
}
邮编控制器:
public class CityController : Controller
{
private ILogger<CityController> _logger;
private IZipcodeRepository _repository;
public CityController(ILogger<CityController> logger, IZipcodeRepository repository)
{
_logger = logger;
_repository = repository;
}
[HttpGet("{cityName}")]
public IActionResult GetCities(string cityName)
{
var results = _repository.GetCitiesByCityName(cityName);
return Ok(Mapper.Map<IEnumerable<CityViewModel>>(results));
}
邮政编码存储库:
public class ZipcodeRepository : IZipcodeRepository
{
private ZipcodeContext _context;
public ZipcodeRepository(ZipcodeContext context)
{
_context = context;
}
public IEnumerable<City> GetCitiesByCityName(string cityName)
{
return _context.Cities.Where(t => t.Name.Contains(cityName)).ToList();
}
IZipcodeInterface:
public interface IZipcodeRepository
{
IEnumerable<City> GetCitiesByCityName(string cityName);
// City GetCityNameById(int cityId);
}
我的创业:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<ZipcodeContext>();
services.AddScoped<IZipcodeRepository, ZipcodeRepository>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(_config.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseMvc(config =>
{
config.MapRoute(
name: "Default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "App", action = "Index" }
);
}
注意:禁用 CityController 的构造函数并使用空的,我猜错误来自_repository = repository
【问题讨论】:
-
因为你在
ZipcodeContext中使用了IConfigurationRoot,我宁愿推荐你使用Options模式。 -
为什么重要?在我遵循的教程中,他使用了 IConfigurationRoot 并且那个东西有效。为什么现在不起作用? @YuriyN。
-
能否请您链接教程?现在不行,因为在内置的 Asp.Net Core 依赖注入容器中,当 DI 面对它时,没有注册服务来解析
IConfigurationRoot接口。 -
我可以,但它是复数形式,所以除非您有用户,否则您将无法看到它:app.pluralsight.com/…@YuriyN。
-
那么如何注册服务来解析
IConfigurationRoot?
标签: c# api asp.net-core