[英]Circular dependency in ASP.NET Core
對於學校,我們必須使用.NET實體核心框架編寫自己的WebApi。 我已經編寫了api,但是當我試圖用它揮舞時,它總是返回HTTP 500錯誤:內部服務器錯誤。 我下載了Fiddler以開始調試,並在我的存儲庫中遇到了循環依賴項錯誤,但我不知道會在哪里發生。
接口(用於模擬測試)
public interface IVisitorRepository
{
Visitor GetBy(string email);
void AddVisitor(Visitor visitor);
void SaveChanges();
}
具體課
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();
}
}
我已經在我的管道中確定了范圍。
這是一個基於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();
}
例外:
InvalidOperationException:檢測到類型為'DigitizedApi.Models.Repositories.IVisitorRepository'的服務的循環依賴關系。 DigitizedApi.Models.Repositories.IVisitorRepository(DigitizedApi.Data.Repositories.VisitorRepository)-> DigitizedApi.Models.Repositories.IVisitorRepository
問題是您的VisitorRepository
(實現IVisitorRepository
)對IVisitorRepository
本身具有依賴性。
實際上應該如下:
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.