我首先使用Entity Framework代码在.net核心项目中创建几个端点。
我有另一个类,并且想要在实体类控制器中使用其中一个方法而不进行API调用,因为它们都在同一个项目中,但我不确定该用于上下文。
NoteController :
[Route("api/note")]
public class NoteController : Controller
{
private readonly HDDbContext _context;
public NoteController(HDDbContext context)
{
_context = context;
}
[HttpGet("{userid}")]
public async Task<IActionResult> GetNote([FromRoute] int userid)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var note= await _context.Note.SingleOrDefaultAsync(m => m.UserId == userid);
if (note== null)
{
return NotFound();
}
return Ok(note);
}
}
USENOTE 类:
是否可以在类中使用控制器方法?
public class USENOTE
{
NoteController nc = new NoteController().GetNote(1) //Not sure if this is possible
}
答案 0 :(得分:1)
其他人已经指出这是一个坏主意。这是你可以做的一个例子。
<强> NotesRepository.cs 强>
在这种情况下,我将get-note-by-id逻辑重构为一个类,如下所示:
public class NotesRepository
{
private readonly HDDbContext _context;
public NotesRepository(HDDbContext context)
{
_context = context;
}
public Task<Note> GetNoteAsync(int id)
{
// your logic
return note;
}
}
<强> Startup.cs 强>
将其注册到DI容器中,以便随处可访问:
public void ConfigureServices(IServiceCollection services)
{
// ... the existing code
// Register the notes repository as a service
services.AddScoped<NotesRepository>();
}
您现在可以使用DI从任意数量的控制器/服务中使用它:
public class NoteController : Controller
{
private readonly NotesRepository _notes;
public NoteController(NotesRepository notes)
{
_notes = notes;
}
[HttpGet("{userid}")]
public async Task<IActionResult> GetNote([FromRoute] int userid)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var note = await _notes.GetAsync(userId);
if (note == null)
{
return NotFound();
}
return Ok(note);
}
}