[英]Circular dependency in ASP.NET Core
For school we have to write our own WebApi using the .NET Entity Core Framework. 对于学校,我们必须使用.NET实体核心框架编写自己的WebApi。 I've written my api but when I tried to use it in swagger, it always returned a HTTP 500 error: internal server error.
我已经编写了api,但是当我试图用它挥舞时,它总是返回HTTP 500错误:内部服务器错误。 I downloaded Fiddler to start debugging and came across a circular dependency error in my repository but I can't figure out where this would take place.
我下载了Fiddler以开始调试,并在我的存储库中遇到了循环依赖项错误,但我不知道会在哪里发生。
The interface (for mock testing) 接口(用于模拟测试)
public interface IVisitorRepository
{
Visitor GetBy(string email);
void AddVisitor(Visitor visitor);
void SaveChanges();
}
The concrete class 具体课
public class VisitorRepository : IVisitorRepository
{
private readonly ApplicationDbContext _context;
private readonly DbSet<Visitor> _visitors;
public VisitorRepository(ApplicationDbContext context, IVisitorRepository visitorRepository)
{
_context = context;
_visitors = _context.Visitors;
}
public void AddVisitor(Visitor visitor)
{
_visitors.Add(visitor);
}
public Visitor GetBy(string email)
{
return _visitors.SingleOrDefault(v => v.Email == email);
}
public void SaveChanges()
{
_context.SaveChanges();
}
}
I've scoped it in my pipeline. 我已经在我的管道中确定了范围。
It's a JWT token based login and register api (that's what we need to make) and here's my register method (the method I'm testing) 这是一个基于JWT令牌的登录和注册api(这是我们需要做的),这是我的register方法(我正在测试的方法)
[AllowAnonymous]
[HttpPost("register")]
public async Task<ActionResult<String>> Register(RegisterDTO model)
{
IdentityUser user = new IdentityUser { UserName = model.Email, Email = model.Email };
Visitor visitor = new Visitor(model.FirstName + " " + model.LastName, model.Email, model.PhoneNumber, model.Country);
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
_visitorRepository.AddVisitor(visitor);
_visitorRepository.SaveChanges();
string token = GetToken(user);
return Created("", token);
}
return BadRequest();
}
The exception: 例外:
InvalidOperationException: A circular dependency was detected for the service of type 'DigitizedApi.Models.Repositories.IVisitorRepository'.
InvalidOperationException:检测到类型为'DigitizedApi.Models.Repositories.IVisitorRepository'的服务的循环依赖关系。 DigitizedApi.Models.Repositories.IVisitorRepository(DigitizedApi.Data.Repositories.VisitorRepository) -> DigitizedApi.Models.Repositories.IVisitorRepository
DigitizedApi.Models.Repositories.IVisitorRepository(DigitizedApi.Data.Repositories.VisitorRepository)-> DigitizedApi.Models.Repositories.IVisitorRepository
Problem is your VisitorRepository
(which implements IVisitorRepository
) has a dependency on IVisitorRepository
itself. 问题是您的
VisitorRepository
(实现IVisitorRepository
)对IVisitorRepository
本身具有依赖性。
Actually it should be as follows: 实际上应该如下:
public class VisitorRepository : IVisitorRepository
{
private readonly ApplicationDbContext _context;
private readonly DbSet<Visitor> _visitors;
public VisitorRepository(ApplicationDbContext context)
{
_context = context;
_visitors = _context.Visitors;
}
.........
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.