CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

dependency-injection-patterns

Organize DI registrations using IServiceCollection extension methods. Group related services into composable Add* methods for clean Program.cs and reusable configuration in tests.

Quality

72%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./skills/microsoft-extensions-dependency-injection/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

63%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A well-structured, highly actionable patterns reference whose main defects are a dangling reference to a nonexistent advanced-patterns.md (leaving testing examples inaccessible) and a sizable stretch of textbook DI lifetime material Claude already knows. Fixing the broken reference would most improve the skill.

Suggestions

Create advanced-patterns.md with the promised testing/scope-management content (WebApplicationFactory, Akka.Hosting.TestKit, actor scope management) or remove the three references and inline the essentials — as written, the pointers are dead ends.

Cut or compress the Lifetime Management table and Common Mistakes section to brief reminders or move them into advanced-patterns.md; scoped/transient/singleton semantics and the scoped-in-singleton pitfall are knowledge Claude already has.

Delete the empty placeholder code block under "Don't: Register Everything in Program.cs" — it adds no information beyond The Problem section — and add a short ordered walkthrough for refactoring an existing bloated Program.cs into Add* extensions.

DimensionReasoningScore

Conciseness

The pattern sections are tight, but ~80 lines teach textbook Microsoft DI knowledge Claude already has: the full Singleton/Scoped/Transient lifetime table and the scoped-captured-in-singleton mistake are standard framework docs material. The Anti-Patterns section also opens with an empty placeholder code block ("// BAD: Massive Program.cs with 200+ lines of registrations") that merely restates The Problem section. Not a 2 because the bulk (extension structure, file organization, naming, layered composition, Akka.Hosting) is genuinely additive, non-obvious project-specific guidance; not a 4 because the lifetime/mistakes sections are more than minor over-explanation.

3 / 5

Actionability

Concrete, copy-paste-ready C# throughout: the full UserServiceCollectionExtensions class, options binding with ValidateOnStart, layered composition, Akka.Hosting WithActors registration, and both scope-creation fixes (IServiceProvider.CreateScope and IServiceScopeFactory). Minor gaps only: several examples end in "// ..." or "{ ... }" ellipses, and the complete testing examples are deferred to a file that doesn't exist (see progressive_disclosure).

4 / 5

Workflow Clarity

As a patterns skill it has no destructive or batch operations, so no validation loop is required; the application sequence is legible — write the extension class (with full template), place it per the file-organization layout and naming table, compose in Program.cs, reuse in tests. Not a 5 because there is no explicit ordered walkthrough for the skill's core use case (refactoring an existing 200-line Program.cs into extensions); the reader must assemble the steps from separate sections.

4 / 5

Progressive Disclosure

Section structure is clear with headers and a well-signaled, one-level-deep pointer to advanced-patterns.md for testing/actor-scope detail — but that file does not exist anywhere in the skill bundle, so "See [advanced-patterns.md](advanced-patterns.md) for complete testing examples" (referenced three times) is a dead end, and the Testing Benefits section's central promise cannot be followed up. Not a 2 because the body is itself well organized and the reference is clearly signaled rather than buried; the failure is the missing target file, not missing structure.

3 / 5

Total

14

/

20

Passed

Description

70%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A specific, distinct description with good .NET-native trigger terms, undermined by a complete absence of "when to use" guidance. Adding an explicit trigger clause and spelling out "dependency injection" / "ASP.NET Core" would lift it substantially.

Suggestions

Add an explicit trigger clause, e.g. "Use when organizing service registrations in ASP.NET Core, when Program.cs/Startup.cs grows unwieldy with registrations, or when making DI configuration reusable in tests."

Spell out "dependency injection" and include "ASP.NET Core" / "service registration" so users who don't type the "DI" abbreviation or "IServiceCollection" still match.

Reflect the body's actual scope (Akka.Hosting actor registration, lifetime management) in the description, or trim those topics from the body so description and content align.

DimensionReasoningScore

Specificity

"Organize DI registrations using IServiceCollection extension methods" and "Group related services into composable Add* methods for clean Program.cs and reusable configuration in tests" list several concrete actions (organize registrations, group into Add* methods, clean Program.cs, reusable test configuration). Not a 5: coverage has more than minor gaps — the body also covers lifetime management, Akka.Hosting actors, and common mistakes, none of which the description hints at.

4 / 5

Completeness

The "what" is clear (organize DI registrations into composable IServiceCollection extension methods), but there is no "Use when..." clause or equivalent explicit trigger guidance, which caps this dimension at 3. Not a 4 because the "when" is entirely absent rather than merely imprecise; not a 2 because the "what" is concrete and specific.

3 / 5

Trigger Term Quality

Solid natural keywords: "DI registrations", "IServiceCollection", "Add* methods", "Program.cs", "tests" — phrases a .NET developer would actually say. Not a 5: it never spells out "dependency injection" (only the abbreviation "DI") and omits common variations like "ASP.NET Core", "service registration", or "Startup.cs".

4 / 5

Distinctiveness Conflict Risk

Highly .NET-specific terms ("IServiceCollection", "Add* methods", "Program.cs") carve out a clear niche with minimal overlap risk against other skills. Would not naturally trigger for non-.NET dependency injection or generic code-organization needs.

5 / 5

Total

16

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

relative_links

Relative link issues: 3 missing

Warning

Total

15

/

16

Passed

Repository

Aaronontheweb/dotnet-skills

Path

skills/microsoft-extensions-dependency-injection/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.