public void ParameterizedScopeCache()
		{
			var count = 0;
			var one = new object().Sourced();
			
			var scope = new ParameterizedScope<Type, int>( type => type.Name.Length * ++count ).ScopedWith( one );
			var cache = scope.ToCache();
			var first = typeof(int).Name.Length;
			Assert.Equal( first, cache.Get( typeof(int) ) );
			Assert.Equal( 1, count );
			Assert.Equal( first, cache.Get( typeof(int) ) );
			Assert.Equal( 1, count );

			var two = new object().Sourced();
			scope.Assign( two );
			scope.Assign( type => type.Name.Length + 5000 * ++count );
			count = 0;

			var t = typeof(DateTimeOffset);
			var second = t.Name.Length + 5000;
			Assert.Equal( second, cache.Get( t ) );
			Assert.Equal( 1, count );
			Assert.Equal( second, cache.Get( t ) );
			Assert.Equal( 1, count );

			scope.Assign( one );
			count = 10;

			Assert.Equal( first, cache.Get( typeof(int) ) );
			Assert.Equal( 10, count );
			Assert.Equal( first, cache.Get( typeof(int) ) );
			Assert.Equal( 10, count );

			var thirdType = typeof(StringAnimationUsingKeyFrames);
			var secondOne = thirdType.Name.Length * ( count + 1 );
			Assert.Equal( secondOne, cache.Get( thirdType ) );
			Assert.Equal( 11, count );
			Assert.Equal( secondOne, cache.Get( thirdType ) );
			Assert.Equal( 11, count );

			Assert.Equal( second, cache.Get( t ) );
			Assert.Equal( 11, count );
			Assert.Equal( second, cache.Get( t ) );
			Assert.Equal( 11, count );
		}
		public void ParameterizedScopeAssignment()
		{
			var count = 0;
			var one = new object().Sourced();
			
			var scope = new ParameterizedScope<int, int>( i => i * ++count ).ScopedWith( one );

			Assert.Equal( 0, count );
			Assert.Equal( 2, scope.Get( 2 ) );
			Assert.Equal( 1, count );
			Assert.Equal( 4, scope.Get( 2 ) );
			Assert.Equal( 2, count );
			Assert.Equal( 6, scope.Get( 2 ) );
			Assert.Equal( 3, count );

			var two = new object().Sourced();
			scope.Assign( two );
			scope.Assign( i => i * ++count * -1 );
			count = 0;

			Assert.Equal( 0, count );
			Assert.Equal( -2, scope.Get( 2 ) );
			Assert.Equal( 1, count );
			Assert.Equal( -4, scope.Get( 2 ) );
			Assert.Equal( 2, count );
			Assert.Equal( -6, scope.Get( 2 ) );
			Assert.Equal( 3, count );

			scope.Assign( one );
			count = 0;

			Assert.Equal( 0, count );
			Assert.Equal( 2, scope.Get( 2 ) );
			Assert.Equal( 1, count );
			Assert.Equal( 4, scope.Get( 2 ) );
			Assert.Equal( 2, count );
			Assert.Equal( 6, scope.Get( 2 ) );
			Assert.Equal( 3, count );
		}