Scrutor to sprytna biblioteka, która pozwala na automatyczną rejestrację zależności (dependency injection) dla kontenera IOC Microsoft.Extensions.DependencyInjection.
Ideą biblioteki Scrutor jest skanowanie kodu źródłowego, np. assembly, celem automatycznej rejestracji zależności wedle zadanych przez nas reguł.
Przykładowo, jeśli w naszym assembly chcemy:
zarejestrować automatycznie zależności interfejs-klasa,
filter.Where(type => !typeof(Attribute).IsAssignableFrom(type)
,UsingRegistrationStrategy(RegistrationStrategy.Skip)
… to możemy dodać do naszego pliku Startup.cs
kod:
private static readonly Type AssemblyMarkerType = typeof(Startup);
// ...
public void ConfigureServices(IServiceCollection services)
{
// ...
ConfigureDependencies(services);
}
private static void ConfigureDependencies(IServiceCollection services)
{
services.Scan(x => x.FromAssembliesOf(AssemblyMarkerType)
.AddClasses(filter => filter.Where(type => !typeof(Attribute).IsAssignableFrom(type)))
.UsingRegistrationStrategy(RegistrationStrategy.Skip)
.AsImplementedInterfaces());
}
Scrutor zarejestruje nam wszystkie interfejsy, które są zdefiniowane w naszym assembly (ale nie są atrybutami).
Więcej na temat Scrutor na stronie GitHub.