Я регистрировал свои зависимости в своем контейнере 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>();