Na pewno znasz standardowy sposób rejestracji zależności w .net core
services.AddTransient<IWeatherForecastService, WeatherForecastService>(); services.AddScoped<IWeatherForecastService, WeatherForecastService>(); services.AddSingleton<IWeatherForecastService, WeatherForecastService>();
Nie będę zanudzał o różnicach pomiędzy nimi i nie o tym jest ten post. Jeśli pracowałeś z jakimś dużym projektem to wiesz, że strasznie „puchnie” dodawanie kolejnych zależności. Można sobie z tym poradzić poprzez extensions methods, zwykłe metody i pewnie jakieś jeszcze inne sposoby. Ostatnio znalazłem Scrutor i chciałbym pokazać jak można zrobić to prościej.
Zamiast rejestrować każdą implementację po kolei możemy to zrobić na przykład tak:
services.Scan(scan => scan .FromAssemblyDependencies(Assembly.GetExecutingAssembly()) .AddClasses(classes => classes.Where(x => x.Name.EndsWith("Service"))) .AsImplementedInterfaces() .WithSingletonLifetime()); services.Scan(scan => scan .FromAssemblyDependencies(Assembly.GetExecutingAssembly()) .AddClasses(classes => classes.Where(x => x.Name.EndsWith("Repository"))) .AsImplementedInterfaces() .WithSingletonLifetime());
Jak widzisz biblioteka jest bardzo elastyczna i można to zrobić sprytniej (np. dodać osobne interfejsy na Transient, Singleton i Scoped tak jak autor tego posta).