DefaultObjectPoolProvider chooses on T and added factory method to ObjectPool

\n\nCommit migrated from 17883d97a9
This commit is contained in:
Günther Foidl 2019-01-19 20:16:41 +01:00 committed by Ryan Nowak
parent b9912fee6b
commit 033b118a96
3 changed files with 58 additions and 0 deletions

View File

@ -11,6 +11,11 @@ namespace Microsoft.Extensions.ObjectPool
public override ObjectPool<T> Create<T>(IPooledObjectPolicy<T> policy)
{
if (typeof(IDisposable).IsAssignableFrom(typeof(T)))
{
return new DisposableObjectPool<T>(policy, MaximumRetained);
}
return new DefaultObjectPool<T>(policy, MaximumRetained);
}
}

View File

@ -9,4 +9,13 @@ namespace Microsoft.Extensions.ObjectPool
public abstract void Return(T obj);
}
public static class ObjectPool
{
public static ObjectPool<T> Create<T>(IPooledObjectPolicy<T> policy = null) where T : class, new()
{
var provider = new DefaultObjectPoolProvider();
return provider.Create(policy ?? new DefaultPooledObjectPolicy<T>());
}
}
}

View File

@ -0,0 +1,44 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Xunit;
namespace Microsoft.Extensions.ObjectPool
{
public class DefaultObjectPoolProviderTest
{
[Fact]
public void DefaultObjectPoolProvider_CreateForObject_DefaultObjectPoolReturned()
{
// Arrange
var provider = new DefaultObjectPoolProvider();
// Act
var pool = provider.Create<object>();
// Assert
Assert.IsType<DefaultObjectPool<object>>(pool);
}
[Fact]
public void DefaultObjectPoolProvider_CreateForIDisposable_DisposableObjectPoolReturned()
{
// Arrange
var provider = new DefaultObjectPoolProvider();
// Act
var pool = provider.Create<DisposableObject>();
// Assert
Assert.IsType<DisposableObjectPool<DisposableObject>>(pool);
}
private class DisposableObject : IDisposable
{
public bool IsDisposed { get; private set; }
public void Dispose() => IsDisposed = true;
}
}
}