/// <summary> /// Sets the factory that should be used for creating instances of <see cref="IResourceManager" />. /// </summary> /// <param name="factory">The factory.</param> /// <param name="flags">The flags.</param> /// <exception cref="System.ArgumentNullException"><paramref name="factory" /> was <see langword="null" />.</exception> public static void ForResourceManagerUse( [NotNull] Func <StyleManager, IResourceManager> factory, DependencyCacheFlags flags) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } AddOrUpdateCache(factory, flags); }
/// <summary> /// Sets the factory that should be used for creating instances of type <see cref="TDependancy" />. /// </summary> /// <param name="factory">The factory.</param> /// <param name="flags">The flags.</param> /// <exception cref="System.ArgumentNullException"><paramref name="factory" /> was <see langword="null" />.</exception> public static void ForTypeUse <TDependancy, TArgs>( [NotNull] Func <TArgs, TDependancy> factory, DependencyCacheFlags flags) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } AddOrUpdateCache(factory, flags); }
public DependencyCache([NotNull] Func <TArgs, TDependancy> factory, DependencyCacheFlags flags) { Debug.Assert(factory != null, "factory != null"); Factory = factory; Flags = flags; switch (flags & CacheTypeMask) { case DependencyCacheFlags.CachePerArgs: _perArgs = new ConcurrentDictionary <TArgs, TDependancy>(); _globalLock = new object(); break; case DependencyCacheFlags.CacheGlobal: _globalLock = new object(); break; } }
private static DependencyCache <TDependancy, TArgs> AddOrUpdateCache <TDependancy, TArgs>( [NotNull] Func <TArgs, TDependancy> factory, DependencyCacheFlags flags) { Debug.Assert(factory != null, "factory != null"); return((DependencyCache <TDependancy, TArgs>)_caches.AddOrUpdate( new Tuple <Type, Type>(typeof(TDependancy), typeof(TArgs)), _ => new DependencyCache <TDependancy, TArgs>(factory, flags), (_, old) => { Debug.Assert( old is DependencyCache <TDependancy, TArgs>, "old is DependencyCache<TDependancy, TArgs>"); ((DependencyCache <TDependancy, TArgs>)old).Dispose(); return new DependencyCache <TDependancy, TArgs>(factory, flags); })); }