diff --git a/Enyim.Caching.Tests/Enyim.Caching.Tests.csproj b/Enyim.Caching.Tests/Enyim.Caching.Tests.csproj
index a3fc1b41..77ce0f23 100644
--- a/Enyim.Caching.Tests/Enyim.Caching.Tests.csproj
+++ b/Enyim.Caching.Tests/Enyim.Caching.Tests.csproj
@@ -5,8 +5,8 @@
-
-
+
+
diff --git a/Enyim.Caching.Tests/MemcachedClientTestsBase.cs b/Enyim.Caching.Tests/MemcachedClientTestsBase.cs
index 7e5f1eb4..ef910f69 100644
--- a/Enyim.Caching.Tests/MemcachedClientTestsBase.cs
+++ b/Enyim.Caching.Tests/MemcachedClientTestsBase.cs
@@ -7,6 +7,7 @@
using Enyim.Caching.Memcached;
using Xunit;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Configuration;
namespace Enyim.Caching.Tests
{
@@ -17,6 +18,8 @@ public abstract class MemcachedClientTestsBase
public MemcachedClientTestsBase()
{
IServiceCollection services = new ServiceCollection();
+ var configuration = new ConfigurationBuilder().Build();
+ services.AddSingleton(configuration);
services.AddEnyimMemcached(options => options.AddServer("memcached", 11211));
services.AddLogging();
IServiceProvider serviceProvider = services.BuildServiceProvider();
diff --git a/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs b/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs
index 998a3012..c4ed6b91 100755
--- a/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs
+++ b/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs
@@ -6,6 +6,7 @@
using Enyim.Caching.Memcached.Protocol.Binary;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
+using Microsoft.Extensions.Configuration;
namespace Enyim.Caching.Configuration
{
@@ -26,6 +27,7 @@ public class MemcachedClientConfiguration : IMemcachedClientConfiguration
public MemcachedClientConfiguration(
ILoggerFactory loggerFactory,
IOptions optionsAccessor,
+ IConfiguration configuration,
ITranscoder transcoder = null,
IMemcachedKeyTransformer keyTransformer = null)
{
@@ -37,6 +39,11 @@ public MemcachedClientConfiguration(
_logger = loggerFactory.CreateLogger();
var options = optionsAccessor.Value;
+ if(options == null || options.Servers.Count == 0)
+ {
+ configuration.GetSection("enyimMemcached").Bind(options);
+ }
+
Servers = new List();
foreach (var server in options.Servers)
{
diff --git a/Enyim.Caching/Enyim.Caching.csproj b/Enyim.Caching/Enyim.Caching.csproj
index 6d1c8df3..eb689dff 100755
--- a/Enyim.Caching/Enyim.Caching.csproj
+++ b/Enyim.Caching/Enyim.Caching.csproj
@@ -2,7 +2,7 @@
EnyimMemcachedCore is a Memcached client library for .NET Core. Usage: Add services.AddEnyimMemcached(...) and app.UseEnyimMemcached() in Startup. Add IMemcachedClient into constructor.
- 2.1.1
+ 2.1.2
cnblogs.com
netstandard2.0
true
@@ -16,13 +16,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs b/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs
index 3a130839..a2c6a290 100644
--- a/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs
+++ b/Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs
@@ -11,6 +11,17 @@ namespace Microsoft.Extensions.DependencyInjection
{
public static class EnyimMemcachedServiceCollectionExtensions
{
+ ///
+ /// Add EnyimMemcached to the specified .
+ /// Read configuration via IConfiguration.GetSection("enyimMemcached")
+ ///
+ ///
+ ///
+ public static IServiceCollection AddEnyimMemcached(this IServiceCollection services)
+ {
+ return AddEnyimMemcachedInternal(services, null);
+ }
+
public static IServiceCollection AddEnyimMemcached(this IServiceCollection services, Action setupAction)
{
if (services == null)
@@ -23,7 +34,7 @@ public static IServiceCollection AddEnyimMemcached(this IServiceCollection servi
throw new ArgumentNullException(nameof(setupAction));
}
- return AddEnyimMemcached(services, s => s.Configure(setupAction));
+ return AddEnyimMemcachedInternal(services, s => s.Configure(setupAction));
}
public static IServiceCollection AddEnyimMemcached(this IServiceCollection services, IConfigurationSection configurationSection)
@@ -38,7 +49,7 @@ public static IServiceCollection AddEnyimMemcached(this IServiceCollection servi
throw new ArgumentNullException(nameof(configurationSection));
}
- return AddEnyimMemcached(services, s => s.Configure(configurationSection));
+ return AddEnyimMemcachedInternal(services, s => s.Configure(configurationSection));
}
public static IServiceCollection AddEnyimMemcached(this IServiceCollection services, IConfiguration configuration, string sectionKey = "enyimMemcached")
@@ -53,13 +64,13 @@ public static IServiceCollection AddEnyimMemcached(this IServiceCollection servi
throw new ArgumentNullException(nameof(configuration));
}
- return AddEnyimMemcached(services, s => s.Configure(configuration.GetSection(sectionKey)));
+ return AddEnyimMemcachedInternal(services, s => s.Configure(configuration.GetSection(sectionKey)));
}
- private static IServiceCollection AddEnyimMemcached(IServiceCollection services, Action configure)
+ private static IServiceCollection AddEnyimMemcachedInternal(IServiceCollection services, Action configure)
{
services.AddOptions();
- configure(services);
+ configure?.Invoke(services);
services.TryAddSingleton();
services.TryAddSingleton();
diff --git a/MemcachedTest/FailurePolicyTest.cs b/MemcachedTest/FailurePolicyTest.cs
index 5bf861a6..921427e1 100644
--- a/MemcachedTest/FailurePolicyTest.cs
+++ b/MemcachedTest/FailurePolicyTest.cs
@@ -9,19 +9,16 @@
using Xunit;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Configuration;
namespace MemcachedTest
{
- public class FailurePolicyTest
- {
- [Fact]
- public void TestIfCalled()
- {
- IServiceCollection services = new ServiceCollection();
- services.AddEnyimMemcached(options => options.AddServer("memcached", 11212));
- services.AddLogging();
- IServiceProvider serviceProvider = services.BuildServiceProvider();
-
+ public class FailurePolicyTest
+ {
+ [Fact]
+ public void TestIfCalled()
+ {
+ IServiceProvider serviceProvider = getServiceProvider();
var config = serviceProvider.GetService();
config.SocketPool.FailurePolicyFactory = new FakePolicy();
config.SocketPool.ConnectionTimeout = TimeSpan.FromSeconds(1);
@@ -29,65 +26,71 @@ public void TestIfCalled()
var logger = serviceProvider.GetService();
- var client = new MemcachedClient(logger, config);
+ var client = new MemcachedClient(logger, config);
Assert.Null(client.Get("a"));
- }
-
- class FakePolicy : INodeFailurePolicy, INodeFailurePolicyFactory
- {
- bool INodeFailurePolicy.ShouldFail()
- {
- Assert.True(true);
-
- return true;
- }
-
- INodeFailurePolicy INodeFailurePolicyFactory.Create(IMemcachedNode node)
- {
- return new FakePolicy();
- }
- }
-
- [Fact]
- public void TestThrottlingFailurePolicy()
- {
- IServiceCollection services = new ServiceCollection();
- services.AddEnyimMemcached(options => options.AddServer("localhost", 11212));
- services.AddLogging();
- IServiceProvider serviceProvider = services.BuildServiceProvider();
-
- var config = serviceProvider.GetService();
- config.SocketPool.FailurePolicyFactory = new ThrottlingFailurePolicyFactory(4, TimeSpan.FromMilliseconds(2000));
- config.SocketPool.ConnectionTimeout = TimeSpan.FromMilliseconds(5);
- config.SocketPool.ReceiveTimeout = TimeSpan.FromMilliseconds(5);
- config.SocketPool.MinPoolSize = 1;
- config.SocketPool.MaxPoolSize = 1;
+ }
+
+ class FakePolicy : INodeFailurePolicy, INodeFailurePolicyFactory
+ {
+ bool INodeFailurePolicy.ShouldFail()
+ {
+ Assert.True(true);
+
+ return true;
+ }
+
+ INodeFailurePolicy INodeFailurePolicyFactory.Create(IMemcachedNode node)
+ {
+ return new FakePolicy();
+ }
+ }
+
+ [Fact]
+ public void TestThrottlingFailurePolicy()
+ {
+ var serviceProvider = getServiceProvider();
+ var config = serviceProvider.GetService();
+ config.SocketPool.FailurePolicyFactory = new ThrottlingFailurePolicyFactory(4, TimeSpan.FromMilliseconds(2000));
+ config.SocketPool.ConnectionTimeout = TimeSpan.FromMilliseconds(5);
+ config.SocketPool.ReceiveTimeout = TimeSpan.FromMilliseconds(5);
+ config.SocketPool.MinPoolSize = 1;
+ config.SocketPool.MaxPoolSize = 1;
var logger = serviceProvider.GetService();
var client = new MemcachedClient(logger, config);
var canFail = false;
- var didFail = false;
+ var didFail = false;
- client.NodeFailed += node =>
- {
- Assert.True(canFail, "canfail");
+ client.NodeFailed += node =>
+ {
+ Assert.True(canFail, "canfail");
- didFail = true;
- };
+ didFail = true;
+ };
- Assert.Null(client.Get("a"));
- Assert.Null(client.Get("a"));
+ Assert.Null(client.Get("a"));
+ Assert.Null(client.Get("a"));
- canFail = true;
- Thread.Sleep(2000);
+ canFail = true;
+ Thread.Sleep(2000);
- Assert.Null(client.Get("a"));
- Assert.Null(client.Get("a"));
- Assert.Null(client.Get("a"));
- Assert.Null(client.Get("a"));
+ Assert.Null(client.Get("a"));
+ Assert.Null(client.Get("a"));
+ Assert.Null(client.Get("a"));
+ Assert.Null(client.Get("a"));
- Assert.True(didFail, "didfail");
- }
- }
+ Assert.True(didFail, "didfail");
+ }
+
+ private ServiceProvider getServiceProvider()
+ {
+ IServiceCollection services = new ServiceCollection();
+ var configuration = new ConfigurationBuilder().Build();
+ services.AddSingleton(configuration);
+ services.AddEnyimMemcached(options => options.AddServer("localhost", 11212));
+ services.AddLogging();
+ return services.BuildServiceProvider();
+ }
+ }
}
diff --git a/MemcachedTest/MemcachedClientTest.cs b/MemcachedTest/MemcachedClientTest.cs
index 9c3eef0b..9db33c6d 100755
--- a/MemcachedTest/MemcachedClientTest.cs
+++ b/MemcachedTest/MemcachedClientTest.cs
@@ -9,6 +9,8 @@
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
using System.Linq;
+using Microsoft.Extensions.Configuration;
+using System.IO;
namespace MemcachedTest
{
@@ -29,11 +31,13 @@ protected virtual MemcachedClient GetClient(MemcachedProtocol protocol = Memcach
// options.Transcoder = "BinaryFormatterTranscoder";
//}
});
- if(useBinaryFormatterTranscoder)
+ if (useBinaryFormatterTranscoder)
{
- services.AddSingleton();
+ services.AddSingleton();
}
+ var configuration = new ConfigurationBuilder().Build();
+ services.AddSingleton(configuration);
services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Error).AddConsole());
IServiceProvider serviceProvider = services.BuildServiceProvider();
diff --git a/MemcachedTest/MemcachedTest.csproj b/MemcachedTest/MemcachedTest.csproj
index 207fee3e..1baa5e22 100755
--- a/MemcachedTest/MemcachedTest.csproj
+++ b/MemcachedTest/MemcachedTest.csproj
@@ -5,9 +5,9 @@
-
-
-
+
+
+
diff --git a/SampleWebApp/SampleWebApp.csproj b/SampleWebApp/SampleWebApp.csproj
index 22ee8fe2..2f60b431 100644
--- a/SampleWebApp/SampleWebApp.csproj
+++ b/SampleWebApp/SampleWebApp.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/SampleWebApp/Startup.cs b/SampleWebApp/Startup.cs
index fbf84023..d262ba29 100644
--- a/SampleWebApp/Startup.cs
+++ b/SampleWebApp/Startup.cs
@@ -32,7 +32,8 @@ public Startup(IHostingEnvironment env)
public void ConfigureServices(IServiceCollection services)
{
- services.AddEnyimMemcached(Configuration);
+ services.AddEnyimMemcached();
+ //services.AddEnyimMemcached(Configuration);
//services.AddEnyimMemcached(Configuration, "enyimMemcached");
//services.AddEnyimMemcached(Configuration.GetSection("enyimMemcached"));
}
diff --git a/SampleWebApp/web.config b/SampleWebApp/web.config
deleted file mode 100644
index dc0514fc..00000000
--- a/SampleWebApp/web.config
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-