Del 4 av 8

Prompt-filer och Instructions-filer

Sparade prompt-filer gör dina bästa prompts återanvändbara. Instructions-filer gör att Copilot alltid känner till ditt projekts regler — utan att du behöver förklara dem igen.

Lektion 3 — V2 dag 1 Vi skapar de tre filtyper som utgör kärnan i AI-styrning: copilot-instructions.md, .instructions.md och .prompt.md. Du lämnar lektionen med en fungerande instruktionsfil för ditt eget projekt.
OBS — VS Code-funktion Prompt-filer (.prompt.md) och filspecifika instructions-filer (.instructions.md med applyTo) är VS Code-funktioner. Visual Studio 2026 läser .github/copilot-instructions.md men stöder inte de mer avancerade filformaten ännu. Alla teammedlemmar drar nytta av copilot-instructions.md oavsett IDE.

Filtypsöversikt

FiltypVar?SyfteVS CodeVisual Studio
copilot-instructions.md .github/ Projektövergripande regler — alltid aktiva Ja Ja
*.instructions.md .github/instructions/ eller projektmapp Filspecifika regler via applyTo-glob Ja Nej
*.prompt.md .github/prompts/ eller projektmapp Återanvändbara promptmallar, körs manuellt Ja Nej

Mappstruktur

MyProject/ ├── .github/ │ ├── copilot-instructions.md ← Alltid aktiv för hela projektet │ ├── instructions/ │ │ ├── csharp-domain.instructions.md ← Gäller src/Domain/** │ │ ├── csharp-tests.instructions.md ← Gäller **/*.Tests/** │ │ └── csharp-api.instructions.md ← Gäller src/Api/** │ └── prompts/ │ ├── code-review.prompt.md ← Arkitekturgranskning │ ├── generate-value-object.prompt.md ← Skapar Value Objects │ └── write-unit-tests.prompt.md ← Testgenerering ├── src/ │ ├── Domain/ │ ├── Application/ │ └── Api/ └── tests/

copilot-instructions.md — Projektövergripande regler

Filen .github/copilot-instructions.md laddas automatiskt av Copilot för varje interaktion i projektet. Här lägger du regler som alltid ska gälla oavsett vilken fil du arbetar i.

# Copilot Instructions — MyEcommerce

## Teknologistack
- C# 13 / .NET 9
- Arkitektur: Clean Architecture med DDD
- Testramverk: xUnit + NSubstitute + FluentAssertions
- ORM: Entity Framework Core 9

## Namnkonventioner
- Domänklasser: PascalCase, suffix efter roll (OrderService, OrderRepository)
- Interface: prefix I (IOrderRepository)
- Commands: suffix Command (PlaceOrderCommand)
- Events: suffix Event, past tense (OrderPlacedEvent)

## Arkitekturregler
- Domänklasser får INTE ha beroenden till infrastrukturbibliotek
- Repositories ska alltid returnera Result<T>, aldrig kasta exceptions
- Alla public metoder i domänlagret ska ha XML-dokumentation
- Använd records för Value Objects och Commands

## Kodstil
- Filscoped namespaces (namespace MyApp.Domain;)
- Implicit typing (var) när typen är uppenbar från höger sida
- Primary constructors för klasser med enkel initiering

## Vad du INTE ska göra
- Lägg aldrig affärslogik i Controllers eller Minimal API-endpoints
- Använd inte statiska hjälpklasser — injicera beroenden via DI
- Skapa inte "God classes" — håll SRP

.instructions.md — Filspecifika regler med applyTo

Instructions-filer med applyTo-glob i frontmattern aktiveras automatiskt av Copilot när du öppnar filer som matchar mönstret. Du behöver inte tänka på att bifoga dem — de laddas alltid.

---
applyTo: "src/Domain/**/*.cs"
---

# DDD Domänlager — Instruktioner

## Aggregate Root-mönster
- Alla aggregat ärver från AggregateRoot<TId>
- Domänhändelser registreras via AddDomainEvent(), publiceras aldrig direkt
- Konstruktorer är private; skapa instanser via statisk factory-metod Create()

## Value Objects
- Implementeras som sealed record
- Validering i Create()-metoden, returnerar Result<T>
- Ingen direkt tillgång till primitiva fält utifrån — exponera bara den semantiska typen

## Invarianter
- Validera alltid i domänklassens egna metoder, inte i application-lagret
- Kasta DomainException (aldrig ArgumentException) vid invariantbrott
- DomainException innehåller en ErrorCode enum-flagga
---
applyTo: "**/*.Tests.csproj, tests/**/*.cs"
---

# Testregler — Instruktioner

## Namnkonvention
- Testmetod: MethodName_Scenario_ExpectedBehavior
- Testklassnamn: matchar klassen under test + "Tests" (OrderServiceTests)

## Struktur
- Arrange/Act/Assert-kommentarer i varje test
- En assertion per test (undantag: relaterade assertions med FluentAssertions)
- Inga sleep/Thread.Sleep — använd FakeTimeProvider

## NSubstitute
- Skapa substitut i constructor, tilldela i privata readonly-fält
- Verifiera anrop med Received() i Assert-fasen, inte i Arrange

## xUnit
- Theory + InlineData för parameteriserade tester
- Använd IClassFixture för dyr setup (databaskontext etc.)

.prompt.md — Återanvändbara promptmallar

Prompt-filer är sparade promptmallar du kan anropa direkt i Copilot Chat via kommandot / följt av filnamnet. De kan innehålla platshållare och referera till andra filer.

Köra en prompt-fil i VS Code

  1. Öppna Copilot Chat
  2. Skriv / — en lista med tillgängliga prompt-filer visas
  3. Välj prompten, fyll i eventuella variabler
  4. Skicka — Copilot kör prompten med full kontext
---
description: "Generera ett DDD Value Object för angiven typ"
---

# Generera Value Object

Du är en senior C#-arkitekt. Generera ett DDD Value Object för typen **${input:Typnamn, t.ex. EmailAddress}**.

Krav:
- sealed record
- Privat konstruktor
- Statisk Create(string raw) som returnerar Result<${input:Typnamn}>
- Validering: ${input:Valideringsregler, t.ex. "inte null, max 254 tecken, måste innehålla @"}
- Inkludera XML-dokumentation på Create-metoden
- Följ projektet namnkonventioner i #file:.github/copilot-instructions.md

Generera BARA klassen — ingen testfil, inga using-statements utanför namespace.
---
description: "Utför en arkitekturorienterad code review av vald fil"
---

# Arkitektur Code Review

Du är senior C#-arkitekt med fokus på Clean Architecture och DDD.

Granska #file:${input:Filsökväg} mot reglerna i #file:.github/copilot-instructions.md.

Rapportera:
1. **Arkitekturbrott** — brott mot lagerregler, felaktiga beroenden
2. **SRP-brott** — klasser/metoder med mer än ett ansvar
3. **Saknad abstraktion** — konkreta beroenden som borde vara interface
4. **Namnproblem** — avvikelser från projektets namnkonventioner
5. **Potentiella buggar** — nullhantering, saknad felhantering

Format: Numrerad lista per kategori. Inkludera radnummer och konkret åtgärdsförslag.
Avsluta med en sammanfattning: Godkänd / Kräver ändringar / Ej godkänd.

Tips: Versionshanterade prompt-filer

Prompt-filer i Git Committa alltid dina .github/-filer i Git. Det gör att hela teamet delar samma AI-beteende, nya teammedlemmar får rätt kontext direkt, och du kan spåra hur instruktionerna utvecklas över tid. Behandla dem som levande dokumentation — uppdatera dem när arkitekturen förändras.

Referenser

Elektroniska resurser

Böcker

Övningar

Lös övningarna självständigt. Det finns inget facit — lärandet sker i processen.

  1. Skapa din första copilot-instructions.md
    Välj ett befintligt C#-projekt. Skapa .github/copilot-instructions.md med minst sex kategorier: teknologistack, namnkonventioner, arkitekturregler, kodstil, testkonventioner och förbjudna mönster. Be sedan Copilot generera en ny klass — verifierar den att instruktionerna respekterades?
  2. Filspecifik instruktionsfil
    Skapa en .instructions.md-fil med applyTo: "src/Domain/**/*.cs" som specificerar DDD-regler för ditt projekt. Öppna en domänklass och verifiera i Copilot Chat (med /explain) att Copilot känner till reglerna utan att du behövt nämna dem.
  3. Bygg en prompt-fil för testgenerering
    Skapa .github/prompts/write-unit-tests.prompt.md. Prompten ska ta en C#-klass som input och generera kompletta xUnit-tester med NSubstitute och FluentAssertions. Kör prompten på två olika klasser och bedöm resultatkvaliteten.

Soloprojektor

Projekt 1 — Komplett instruktionsfil-svit Bygg en fullständig instruktionsfil-svit för ditt C#-projekt med: (1) copilot-instructions.md med minst åtta regler, (2) minst två .instructions.md-filer med applyTo för olika delar av kodbasen, (3) minst tre .prompt.md-filer för vanliga uppgifter. Committa allt i Git med en tydlig commit-kommentar.
Projekt 2 — Team-onboarding via instruktionsfiler (fördjupning) Föreställ dig att en ny utvecklare joinar ditt projekt. Skulle hen förstå arkitekturens regler enbart genom att läsa dina instruktionsfiler? Testa det: ge en klasskamrat tillgång till projektet utan att förklara något muntligt. Låt hen ställa frågor till Copilot och se om instruktionsfilerna räcker. Iterera på filerna baserat på vad som saknades.

← Föregående: Prompt Engineering Nästa: Copilot Skills och Agenter →