Как повторно использовать репозиторий для каждого запросаC#

Место общения программистов C#
Anonymous
Как повторно использовать репозиторий для каждого запроса

Сообщение Anonymous »

Я пытаюсь использовать внедрение зависимостей для репозитория, который в Program.cs зарегистрирован как служба. Однако репозиторий продолжает создаваться заново каждый раз, когда вызывается контроллер.
У меня такое ощущение, что мне нужно переместить это во что-то, что не находится в контроллере, и/или фактически использовать IServiceProvider А не просто заявить об этом. Это придало бы ему некоторую форму постоянства, но я не уверен, что/где/как это сделать.
Репо — это просто список с CRUD операций и не находится над структурой сущностей или другой структурой данных/базой данных. В основном потому, что я просто пытаюсь изучить и получить пример репо по списку с DI в MVC. Вполне возможно, что своим подходом я порю дохлую лошадь.
Я не получаю никаких ошибок при навигации по своим страницам. Когда я разбираюсь в коде, операции внутри репо называются штрафными и делают то, что я от них ожидаю. Просто когда я захожу на свою страницу «просмотреть все» или «добавить», репозиторий сбрасывается из-за его повторного создания (я полагаю).
Кроме того, что показано ниже, в program.cs есть не было изменено.
Program.Cs
// Add services to the container.
builder.Services.AddControllersWithViews();

builder.Services.AddScoped();
builder.Services.AddScoped();

var app = builder.Build();

BookRepository.cs
public class BookRepository : IBookRepository
{
private List _books;

public BookRepository()
{
_books = new List();
}

public List GetAllBooks()
{
return _books;
}

public Book GetBookByISBN(string ISBN)
{
Book book = _books.Find(x => x.ISBN == ISBN);
return book;
}

public void CreateBook(Book book)
{
_books.Add(book);
}

public void DeleteBook(Book book)
{
_books.Remove(book);
}
}

и конструктор LibraryController.cs
public LibraryController(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
{
throw new ArgumentNullException(nameof(serviceProvider));
}

_bookRepository = serviceProvider.GetService() ??
throw new ArgumentNullException(nameof(_bookRepository));
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... ch-request

Вернуться в «C#»