У вас две проблемы с внедрением зависимостей в ASP.NET Core .
Когда вы вызываете метод AddTransient
, вы добавляете новую службу типа, указанного в параметре первого типа, с типом реализации, указанным во втором.Это позволяет вам использовать службу как зависимость без указания ее реализации.
Вы зарегистрировали класс Repo
в качестве реализации для интерфейса IRepo
, а затем должны использовать интерфейс для разрешенияit:
public AbcController(IRepo _objRepo)
Aslo, AddDbContext
- это метод расширения для регистрации DbContext
и инфраструктуры EF в качестве службы, и он работает аналогичным образом.Вот важная часть реализации для вашего примера:
// TContextService is the type parameter
serviceCollection.TryAdd(new ServiceDescriptor(typeof(TContextService), typeof(TContextService), ServiceLifetime.Scoped));
Это означает, что в serviceCollection добавляется новый сервис типа TContextService
с типом реализации TContextService
.
Итак, вам нужно исправить регистрацию для вашего DbContext
с определенным именем класса в качестве универсального параметра, чтобы разрешить его в классе Repo
:
services.AddDbContext<ConnectToDb>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));