所以...这听起来可能有点愚蠢,但我现在...我目前正在做一个具有以下结构的项目
Project Structure
我得到了服务、控制器、存储库和模型...
这是控制器,我尝试示例化它的服务类。
namespace WebApi.Controllers
{
[Route("api/usuarios")]
[ApiController]
public class UsuariosController : ControllerBase
{
private readonly IUsuariosService _service;
public UsuariosController(IUsuariosService service)
{
_service = service;
}
// private readonly MockUsuarioRepo _repository = new MockUsuarioRepo();
// GET: api/<ValuesController>
[HttpGet]
public ActionResult <IEnumerable<Usuarios>> Get()
{
var usuariosList = _service.GetAllUsuarios();
return Ok(usuariosList);
}
[HttpGet]
[Route("authenticated")]
[Authorize]
public string Authenticated() => String.Format("Autenticado - {0}", User.Identity.Name);
// POST api/<ValuesController>
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/<ValuesController>/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/<ValuesController>/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}
正在尝试示例化存储库
namespace Application.Services
{
public class UsuariosService : IUsuariosService
{
private readonly UsuariosRepo _repository;
public UsuariosService(UsuariosRepo repository) {
_repository = repository;
}
public IEnumerable<Usuarios> GetAllUsuarios()
{
return _repository.GetUsuarios();
}
public static string GenerateToken(Usuarios usuario)
{
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(Settings.Secret);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, usuario.Nome.ToString()),
new Claim(ClaimTypes.Email, usuario.Email.ToString()),
}),
Expires = DateTime.UtcNow.AddHours(2),
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature
)
};
tokenHandler.CreateToken(tokenDescriptor);
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
public Usuarios DoLogin(string username, string password, string name)
{
throw new NotImplementedException();
}
}
}
我学习了如何示例化Repos,方法是在Startup.cs上使用以下方法
public void ConfigureServices(IServiceCollection services)
{
...
services.AddControllers();
services.AddScoped<IUsuariosRepo, UsuariosRepo>();
...
但我认为服务根本没有示例化,这是我向"usuarios"发出GET请求时出现的错误。
Unable to resolve service for type 'Application.Services.Interfaces.IUsuariosService' while attempting to activate 'WebApi.Controllers.UsuariosController'.
有什么想法吗?先谢了。
1条答案
按热度按时间pgky5nke1#
代码中的第一个错误是没有在ConfigureServices中注入 IUsuariosService:
第二点你要注意的是,你没有在你的服务层使用接口,基于依赖反转原则类应该依赖于接口,所以我们必须使用接口而不是UsuariosRepo类。