/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/Consumers/Configuration/InstanceConnectorCache.cs
52 строки
2 KB
Chris Patterson
Massive file cleanup
27 мар 2024, 02:43
27 мар 2024, 02:43
2ac69e8
Код
Авторство
О чём код?
namespace MassTransit.Configuration { using System; using System.Collections.Concurrent; public class InstanceConnectorCache<T> : IInstanceConnectorCache<T> where T : class { readonly Lazy<InstanceConnector<T>> _connector; InstanceConnectorCache() { _connector = new Lazy<InstanceConnector<T>>(() => new InstanceConnector<T>()); } public static IInstanceConnector Connector => InstanceCache.Cached.Value.Connector; IInstanceConnector IInstanceConnectorCache<T>.Connector => _connector.Value; static class InstanceCache { internal static readonly Lazy<IInstanceConnectorCache<T>> Cached = new Lazy<IInstanceConnectorCache<T>>(() => new InstanceConnectorCache<T>()); } } public static class InstanceConnectorCache { public static IInstanceConnector GetInstanceConnector<T>() where T : class { return InstanceCache.Cached.Value.GetOrAdd(typeof(T), _ => new Lazy<IInstanceConnector>(() => InstanceConnectorCache<T>.Connector)).Value; } public static IInstanceConnector GetInstanceConnector(Type type) { return InstanceCache.Cached.Value.GetOrAdd(type, _ => new Lazy<IInstanceConnector>(() => (IInstanceConnector)Activator.CreateInstance(typeof(InstanceConnector<>).MakeGenericType(type)))).Value; } static class InstanceCache { internal static readonly Lazy<ConcurrentDictionary<Type, Lazy<IInstanceConnector>>> Cached = new Lazy<ConcurrentDictionary<Type, Lazy<IInstanceConnector>>>(() => new ConcurrentDictionary<Type, Lazy<IInstanceConnector>>()); } } }