LenovoLegionToolkit

Форк
0
49 строк · 1.2 Кб
1
using System;
2
using Autofac;
3

4
namespace LenovoLegionToolkit.Lib;
5

6
public static class IoCContainer
7
{
8
    private static readonly object Lock = new();
9

10
    private static IContainer? _container;
11

12
    public static void Initialize(params Module[] modules)
13
    {
14
        lock (Lock)
15
        {
16
            if (_container is not null)
17
                throw new InvalidOperationException("IoCContainer already initialized");
18

19
            var cb = new ContainerBuilder();
20

21
            foreach (var module in modules)
22
                cb.RegisterModule(module);
23

24
            _container = cb.Build();
25
        }
26
    }
27

28
    public static T Resolve<T>() where T : notnull
29
    {
30
        lock (Lock)
31
        {
32
            if (_container is null)
33
                throw new InvalidOperationException($"IoCContainer must be initialized first. [type={nameof(T)}]");
34
            return _container.Resolve<T>();
35
        }
36
    }
37

38
    public static T? TryResolve<T>() where T : class
39
    {
40
        lock (Lock)
41
        {
42
            if (_container is null)
43
                throw new InvalidOperationException($"IoCContainer must be initialized first [type={nameof(T)}]");
44
            _ = _container.TryResolve(out T? value);
45
            return value;
46
        }
47
    }
48

49
}
50

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.