«ServiceCollection» не содержит определения для «AddSingleton» - PullRequest
0 голосов
/ 28 августа 2018

Я регистрировал свои зависимости в своем контейнере IOC через класс программы, но это стало грязным. Я решил написать провайдера DI, который предоставлял и регистрировал зависимости внутри него.

Прежде чем я начну объяснять с помощью кода, вот полная ошибка компиляции, которую дает VS.

'ServiceCollection' не содержит определения для 'AddSingleton' Не удается разрешить символ «AddSingleton»

Я старался быть максимально чистым, унаследовав класс ServiceCollection внутри DependencyProvider

public class DependencyProvider : ServiceCollection, IDependencyProvider
{
    public DependencyProvider() : base()
    {
        Register();
    }

    public void Register()
    {
        base.AddSingleton<IContext, Context>(); // this line errors
        new ServiceCollection().AddSingleton<IContext, Context>(); // this line works
    }
}

Вот интерфейс IDependencyProvider

public interface IDependencyProvider : IServiceCollection
{
    void Register();
}

Могу я этого не делать или я просто что-то не так делаю? Я действительно надеюсь, что это возможно, так как решение кажется очень чистым, чтобы создать новый экземпляр ServiceCollection и использовать для него поле.

Просто чтобы прояснить ошибку, я не могу получить доступ ни к одному из базовых методов на ServiceCollection, например

base.AddSingleton<IContext, Context>();

Но эта строка работает при создании встроенного нового экземпляра

new ServiceCollection().AddSingleton<IContext, Context>();

1 Ответ

0 голосов
/ 28 августа 2018

Ключевое слово base не разрешает методы расширения. Что вы хотите сделать, это:

this.AddSingleton<IContext, Context>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...