Создание экземпляра контроллера Entity Framework из класса - PullRequest
0 голосов
/ 16 мая 2018

Я использую сначала 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
}

1 Ответ

0 голосов
/ 16 мая 2018

Другие уже отметили, что это плохая идея. Вот пример того, что вы могли бы сделать.

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...