Регистрация зависимостей
это главное в DI регистрация проводится в месте где запускается всё приложение это либо класс Program в методе Main или класс App в методе
например в WPF
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
// тут регестрируем все зависимости так как этот метод
// вызывается самым первым
}
}
для начало нужен ServiceCollection через него проводится регистрация
protected override void OnStartup(StartupEventArgs e)
{
ServiceCollection services = new ();
}
для регистрации используется методы
services.AddTransient<T>();
services.AddSingleton<T>()
service.AddScoped<T>();
- Transient такой сервис создайся каждый раз по новой
- Singleton такой сервис создайся один раз и приложение использует один и тоже экземпляр
- Scoped создаётся каждый запрос но это используется для веба
Универсальная перегрузки
это дженерик (треуголки3) T место него можно поставить любой класс которым будет зависимостью главное то что он требует должно также зарегестрировать T1,T2 T1 это интерфейс а T2 это класс который его будет реализовывать позволяет не тянуть весь объект
Параметры
такие методы имеют параметр делегат Func<IServiceProvider,T> это так называемая фабрика что позволяет настроить то как объект будет создаваться
Создание провайдера
после регистрации делаем
IServiceProvider serviceProvider = services.BuildServiceProvider();
ServiceProvider это итоговый объект он уже хранит зависимости их его создаёт
serviceProvider.GetService<T>() тут мы заказываем то что ранее регестрировалии