LenovoLegionToolkit
49 строк · 1.2 Кб
1using System;2using Autofac;3
4namespace LenovoLegionToolkit.Lib;5
6public static class IoCContainer7{
8private static readonly object Lock = new();9
10private static IContainer? _container;11
12public static void Initialize(params Module[] modules)13{14lock (Lock)15{16if (_container is not null)17throw new InvalidOperationException("IoCContainer already initialized");18
19var cb = new ContainerBuilder();20
21foreach (var module in modules)22cb.RegisterModule(module);23
24_container = cb.Build();25}26}27
28public static T Resolve<T>() where T : notnull29{30lock (Lock)31{32if (_container is null)33throw new InvalidOperationException($"IoCContainer must be initialized first. [type={nameof(T)}]");34return _container.Resolve<T>();35}36}37
38public static T? TryResolve<T>() where T : class39{40lock (Lock)41{42if (_container is null)43throw new InvalidOperationException($"IoCContainer must be initialized first [type={nameof(T)}]");44_ = _container.TryResolve(out T? value);45return value;46}47}48
49}
50