DefaultObjectPoolProvider chooses on T and added factory method to ObjectPool
\n\nCommit migrated from 17883d97a9
This commit is contained in:
parent
b9912fee6b
commit
033b118a96
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue