csharp / expert
Snippet
Minimalistische Inversion-of-Control Container-Architektur
Die Implementierung eines grundlegenden Inversion of Control (IoC) Containers von Grund auf demonstriert das Konzept von 'Frameworks' unter ausschließlicher Verwendung von Kernfunktionen der Sprache. Dieses Pattern nutzt Delegaten und Typ-Mapping, um die Objekterzeugung von deren Nutzung zu entkoppeln und folgt dem Dependency Inversion Principle ohne externe Bibliotheken.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;using System.Collections.Generic;public class CoreContainer{private readonly Dictionary<Type, Func<object>> _registry = new();public void Bind<T>(Func<T> factory) => _registry[typeof(T)] = () => factory()!;public T Get<T>() => (T)_registry[typeof(T)]();}// Usage:var container = new CoreContainer();container.Bind<IDatabase>(() => new SqlDatabase());var db = container.Get<IDatabase>();
Erklärung
1
private readonly Dictionary<Type, Func<object>> _registry = new();
Speichert ein Mapping von Typen auf Factory-Funktionen für die Instanziierung.
2
public T Get<T>() => (T)_registry[typeof(T)]();
Ruft die Factory ab und führt sie aus, wobei das Ergebnis in den gewünschten Typ gecastet wird.