Не удалось разрешить службу базового класса - PullRequest
1 голос
/ 22 мая 2019

При попытке активировать Controller я получаю следующую ошибку из-за неверно введенного сервиса:

System.InvalidOperationException: 'Невозможно разрешить службу для типа AnubisServer.Server.IDroneOperations при попытке активации 'AnubisServer.DroneController'. '

У меня есть следующая иерархия:

public interface IOperations { }
public interface ICatalog : IOperations { }
public interface IAdmin : ICatalog { }
public interface ICatalogService : IAdmin, ISomethingElse { }

В моем стартапе я предоставляю конкретную реализацию для самого производного интерфейса ICatalogService:

Запуск

public void ConfigureServices(IServiceCollection services) {
    services.AddMvc();
    ICatalogService catalogService = new SomeConcreteService();
    services.AddSingleton(catalogService);
}

Контроллер

public class CatalogController:Controller
{
    private IOperations operations;
    public CatalogController(IOperations ops)
    {
        this.operations=ops;
    }
}

Так что я не понимаю, почему не работает внедрение интерфейса базового класса, поскольку я предоставляю производный конкретный экземпляр.

Есть идеи?

1 Ответ

1 голос
/ 22 мая 2019

Регистрации в IServiceCollection являются парами ключ-значение, где служба (или абстракция) является ключом , а компонент (или реализация) является значением.Поиск будет выполнен на основе этого точного ключа.Так что в вашем случае вы только зарегистрированы ICatalogService, а не IOperations.Это означает, что IOperations не может быть решен.Вам придется зарегистрировать IOperations явно.

...