Вы регистрируете их в Startup.cs
services.AddScoped<IMyRepository, MyRepository>();
services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetValue<string>("AppSettings:DBCS")));
DI DbContext в ваш репозиторий
public MyRepository(MyDbContext myDbContext)
{
_dbContext = myDbContext;
}
И DI репозиторий в ваш контроллер. Обратите внимание, что мы используем IMyRepository
, а не MyRepository
. Мы сообщаем ему, какой репозиторий для DI, когда регистрируем его в Startup.cs
. Убедитесь, что ваш репозиторий реализует ваш интерфейс.
public MyController(IMyRepository myRepository)
{
_repository = myRepository;
}
Тогда в вашем контроллере вы можете делать такие вещи, как
_repository.DoSomeDatabaseStuff(param1, param2);
Если вы не используете интерфейс, то вы 'игнорируя силу DI. Это позволяет вам также создавать такие вещи, как создание UnitTest, в котором вы макетируете репозиторий.
services.AddScoped<IMyRepository, MyMockRepository>();
В MyMockRepository вы можете подделывать данные или гарантировать, что ваши соединения с базой данных и запросы работают, но просто не в состоянии зафиксировать илиавтоматический откат изменений.