{"adoption": {"forks": 280, "observed_at": "2026-08-28T04:08:46.057667+00:00", "stars": 4336}, "canonical_url": "https://ross.abutalabs.com/products/scrutor", "card": {"archived": false, "artifact_type": "library", "description": "Assembly scanning and decoration extensions for Microsoft.Extensions.DependencyInjection", "domain": ["backend", "developer-tools", "web-development"], "enriched": true, "function": ["middleware", "developer-tools"], "health_score": 74, "homepage": null, "language": "C#", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["khellang/Scrutor"], "name": "khellang/Scrutor", "platform": ["dotnet", "cross-platform"], "pushed_at": "2026-01-23T15:16:44+00:00", "repo": "khellang/Scrutor", "stars": 4336, "tags": ["dependency-injection", "assembly-scanning", "service-decoration", "asp-net-core", "convention-based-registration", "microsoft-extensions-dependencyinjection"], "topics": ["scanning", "decoration", "assembly-scanning", "decoration-extensions", "asp-net-core", "dependency-injection", "conventions", "convention-registration", "hacktoberfest", "scrutor"], "urls": [], "use_cases": ["auto-register services by convention in ASP.NET Core", "scan an assembly and register all classes implementing an interface", "decorate registered services with decorators in .NET DI", "register open generic types like query handlers automatically", "reduce boilerplate in IServiceCollection registrations", "apply different lifetimes to batches of services"], "what_it_is": "Scrutor is a C# library providing assembly scanning and service decoration extensions for Microsoft.Extensions.DependencyInjection. It lets developers register classes by convention (filtering by interface, lifetime, etc.) and wrap existing registrations with decorators via a fluent API.", "when_to_avoid": ["you use a different DI container with built-in scanning (e.g., Autofac, Lamar)", "your project has only a handful of services where manual registration is simpler", "you are not on the .NET platform"], "when_to_choose": ["you use Microsoft.Extensions.DependencyInjection and want convention-based registration", "you need decorator support for DI-registered services", "you want to eliminate repetitive manual service registrations in large .NET codebases"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/scrutor", "repo": "khellang/Scrutor", "role": "main", "score": 69}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.057667+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:21:38.194266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "73775f8da921452226c39d2736e8afa4be0365b9f828df49a946058925343cf6", "fetched_at": "2026-08-28T04:08:46.057667+00:00", "kind": "readme", "missing": false, "url": "https://github.com/khellang/Scrutor"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 63, "longevity": 100, "rhythm": 58}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3946, "days_push": 222, "days_rel": 282, "gap_med": 9.5, "n_releases_24m": 11}, "score": 69, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}