/// <summary> /// Initializes a new instance of the <see cref="ProxyFactory"/> class. /// </summary> /// <param name="strongNamedAssembly"></param> /// <param name="canSaveAssembly"></param> /// <param name="interceptionFilter">The interception filter.</param> public ProxyFactory(bool strongNamedAssembly = false,bool canSaveAssembly = false, IInterceptionFilter interceptionFilter = null) { _typeBuilderFactory = new ProxyTypeBuilderFactory(strongNamedAssembly, canSaveAssembly); if (interceptionFilter == null) interceptionFilter = new NonInterceptedInterceptionFilter(); _interceptionFilter = interceptionFilter; _proxyTemplateCache = new LockOnWriteCache<IProxyDefinition, IProxyTemplate>(); }
/// <summary> /// Initializes a new instance of the <see cref="ProxyFactory"/> class. /// </summary> /// <param name="strongNamedAssembly"></param> /// <param name="canSaveAssembly"></param> /// <param name="interceptionFilter">The interception filter.</param> public ProxyFactory(bool strongNamedAssembly = false, bool canSaveAssembly = false, IInterceptionFilter interceptionFilter = null) { _typeBuilderFactory = new ProxyTypeBuilderFactory(strongNamedAssembly, canSaveAssembly); if (interceptionFilter == null) { interceptionFilter = new NonInterceptedInterceptionFilter(); } _interceptionFilter = interceptionFilter; _proxyTemplateCache = new LockOnWriteCache <IProxyDefinition, IProxyTemplate>(); }
public void GetOrAddWithoutCacheHitTest() { // Arrange var invocationCount = 0; Func <int, string> valueFactory = k => { invocationCount++; return(Convert.ToString(k)); }; var cache = new LockOnWriteCache <int, string>(); // Act var value = cache.GetOrAdd(1, valueFactory); // Assert Assert.That(value, Is.EqualTo("1")); Assert.That(invocationCount, Is.EqualTo(1)); }
public void GetOrAddWithCacheHitTest() { // Arrange // Arrange var invocationCount = 0; Func<int, string> valueFactory = k => { invocationCount++; return Convert.ToString(k); }; var cache = new LockOnWriteCache<int, string>(); // Act cache.GetOrAdd(1, valueFactory); var value = cache.GetOrAdd(1, valueFactory); // Assert Assert.That(value, Is.EqualTo("1")); Assert.That(invocationCount, Is.EqualTo(1)); }
public void GetOrAddWithoutCacheHitAndConcurrencyTest() { // Arrange var monitor = new Object(); var invocationCount = 0; Func<int, string> valueFactory = k => { lock (monitor) { Monitor.Wait(monitor); } invocationCount++; return Convert.ToString(k); }; var cache = new LockOnWriteCache<int, string>(); // Act var firstTask = Task.Factory.StartNew(() => cache.GetOrAdd(1, valueFactory)); var secondTask = Task.Factory.StartNew(() => cache.GetOrAdd(1, valueFactory)); firstTask.Wait(500); secondTask.Wait(500); Assert.That(firstTask.IsCompleted, Is.False); Assert.That(secondTask.IsCompleted, Is.False); lock (monitor) { Monitor.Pulse(monitor); } Task.WaitAll(firstTask, secondTask); // Assert Assert.That(firstTask.Result, Is.EqualTo("1")); Assert.That(secondTask.Result, Is.EqualTo("1")); Assert.That(invocationCount, Is.EqualTo(1)); }
public void GetOrAddWithoutCacheHitAndConcurrencyTest() { // Arrange var monitor = new Object(); var invocationCount = 0; Func <int, string> valueFactory = k => { lock (monitor) { Monitor.Wait(monitor); } invocationCount++; return(Convert.ToString(k)); }; var cache = new LockOnWriteCache <int, string>(); // Act var firstTask = Task.Factory.StartNew(() => cache.GetOrAdd(1, valueFactory)); var secondTask = Task.Factory.StartNew(() => cache.GetOrAdd(1, valueFactory)); firstTask.Wait(500); secondTask.Wait(500); Assert.That(firstTask.IsCompleted, Is.False); Assert.That(secondTask.IsCompleted, Is.False); lock (monitor) { Monitor.Pulse(monitor); } Task.WaitAll(firstTask, secondTask); // Assert Assert.That(firstTask.Result, Is.EqualTo("1")); Assert.That(secondTask.Result, Is.EqualTo("1")); Assert.That(invocationCount, Is.EqualTo(1)); }