У меня довольно простая настройка для дизайна репозитория.Использование DI для разрешения хранилищ в конструкторах контроллеров.
Однако DI ведет себя довольно странно.Кажется, он не может разрешить зависимость, которая разрешается как основа зарегистрированного интерфейса.Я полагаю, что это должно быть в состоянии сделать это, поскольку любой тип, который удовлетворяет подчиненному интерфейсу, должен также удовлетворять основанию.
Интересно знать, знает ли кто-нибудь, почему это может происходить?
Пример:
Базовый интерфейс
public interface IReadOnlyRepository<T>
{
void DoSomething();
}
Подинтерфейс
public interface IReadWriteRepository<T> : IReadOnlyRepository<T>
{
void DoSomethingElse();
}
Реализация
public class AccountRepository: IReadWriteRepository<Account>
{
public void DoSomething() { /* BLAH */ }
public void DoSomethingElse() { /* BLAH */ }
}
Регистрация
services.AddTransient<IReadWriteRepository<Account>, AccountRepository>();
Разрешение
provider.Resolve<IReadWriteRepository<Account>>(); // SUCCEEDS :)
provider.Resolve<IReadOnlyRepository<Account>>(); // FAILS! :(