Проект, содержащий класс Startup
, является составным корнем каждого проекта ASP.NET Core.
Он предназначен для настройки всех служб и зависимостей, поэтому для него должны быть указаны все необходимые ссылки.
Если вы хотите, чтобы библиотеки содержали только интерфейсы, и другие библиотеки, реализующие эти интерфейсы, это тоже не проблема, и это также должно быть сделано таким образом.
Microsoft делает то же самое, например, с Logging-Library Microsoft.Extensions.Logging . У них всегда есть абстракции, которые содержат только так называемые Contract
. Тогда есть другой проект внедрения, который использует контракты. При регистрации ILoggerFactory
и ILogger<TCategory>
в корне композиции зависимая библиотека может опираться только на абстракции и поэтому должна ссылаться только на проект Microsoft.Extensions.Logging.Abstractions
, а затем вводить ILogger<TCategory>
.
В вашем случае ApplicationDbContext
происходит от DbContext
.
Вы можете зарегистрировать его в составном корне, чтобы разрешить его как DbContext
, а не как производный класс, добавив эту строку.
services.AddDbContext<ApplicationDbContext, DbContext>() // mor config here
Теперь служба может внедрить DbContext
и запросить его с помощью универсального метода DbContext.Set<TEntity>
Если вам нужны более конкретные примеры того, как это сделать, не стесняйтесь клонировать один из моих pet-проектов .