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)]();}// Usagevar 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.