View difference between Paste ID: v83XZLTc and ucrsdapn
SHOW: | | - or go back to the newest paste.
1-
public sealed partial class RenderTools
1+
public sealed class RenderTools
2
{
3
	private readonly IDictionary<Type, Func<object, Freezable>> _toolFactories = new Dictionary<Type, Func<object, Freezable>>();
4
5
	private readonly IDictionary<object, Freezable> _toolCache = new Dictionary<object, Freezable>();
6
7
	public void RegisterTool<TKey, TResult>(Func<TKey, TResult> toolFactory)
8
		where TResult : Freezable
9
	{
10
		this._toolFactories[typeof(TKey)] = new Func<object, Freezable>(
11
			p =>
12
			{
13
				var tool = toolFactory((TKey)p);
14
				tool.Freeze();
15
				return tool;
16
			});
17
	}
18
19
	public TResult GetTool<TResult>(object toolKey)
20
		where TResult : Freezable
21
	{
22
		Freezable result;
23
24
		if (!this._toolCache.TryGetValue(toolKey, out result))
25
		{
26
			result = this._toolFactories[toolKey.GetType()](toolKey);
27
			this._toolCache.Add(toolKey, result);
28
		}
29
30
		return (TResult)result;
31
	}
32
}