0 Tage Serie
csharp / expert
Snippet

Minimalistischer Dependency-Injection-Container

Das Verständnis der Interna von Frameworks ist für Experten unerlässlich. Dieses Snippet implementiert einen einfachen IoC-Container (Inversion of Control) unter Verwendung eines Dictionarys von Factory-Delegaten. Es zeigt, wie Typen der Instanziierungslogik zugeordnet werden, ohne auf schwere externe Bibliotheken angewiesen zu sein.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SimpleContainer
{
private readonly Dictionary<Type, Func<object>> _factories = new();
public void Register<T>(Func<T> factory) where T : class
=> _factories[typeof(T)] = () => factory();
public T Resolve<T>() where T : class
=> (T)_factories[typeof(T)]();
}
// Usage
var container = new SimpleContainer();
container.Register<ILogger>(() => new ConsoleLogger());
var logger = container.Resolve<ILogger>();
Erklärung
1
Dictionary<Type, Func<object>>
Speichert eine Zuordnung von einem Interface- oder Klassentyp zu einer Funktion, die dessen Instanz erstellt.
2
Register<T>(Func<T> factory)
Speichert einen Lambda-Ausdruck, der aufgerufen wird, wann immer der Typ T angefordert wird.