Skip to content

Commit 4279971

Browse files
committed
Added another overload to the service collection extensions to add cachemanagers for a specific type with a inline configuration. AddCacheManager<T> to require fromConfiguration parameter.
1 parent 227018f commit 4279971

5 files changed

Lines changed: 56 additions & 7 deletions

File tree

samples/AspnetCore.WebApp/Controllers/ValuesController.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ public class ValuesController : Controller
1010
{
1111
private readonly ICacheManager<string> cache;
1212

13-
public ValuesController(ICacheManager<string> valuesCache, ICacheManager<int> intCache)
13+
public ValuesController(ICacheManager<string> valuesCache, ICacheManager<int> intCache, ICacheManager<DateTime> dates)
1414
{
1515
this.cache = valuesCache;
16+
17+
dates.Add("now", DateTime.UtcNow);
18+
intCache.Add("count", 1);
1619
}
1720

1821
// DELETE api/values/key

samples/AspnetCore.WebApp/Startup.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@
44
using Microsoft.AspNetCore.Builder;
55
using Microsoft.AspNetCore.Hosting;
66
using Microsoft.AspNetCore.Http;
7-
using Microsoft.Extensions.Configuration;
87
using Microsoft.Extensions.DependencyInjection;
98
using Microsoft.Extensions.Logging;
109

1110
namespace AspnetCore.WebApp
1211
{
12+
using Microsoft.Extensions.Configuration;
13+
1314
public class Startup
1415
{
1516
public Startup(IHostingEnvironment env)
1617
{
17-
var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
18+
var builder = new ConfigurationBuilder()
1819
.SetBasePath(env.ContentRootPath)
1920
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
2021
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
@@ -35,7 +36,14 @@ public void ConfigureServices(IServiceCollection services)
3536
// using the new overload which adds a singleton of the configuration to services and the configure method to add logging
3637
// TODO: still not 100% happy with the logging part
3738
services.AddCacheManagerConfiguration(Configuration, cfg => cfg.WithMicrosoftLogging(services));
39+
40+
// uses a refined configurastion (this will not log, as we added the MS Logger only to the configuration above
3841
services.AddCacheManager<int>(Configuration, configure: builder => builder.WithJsonSerializer());
42+
43+
// creates a completely new configuration for this instance (also not logging)
44+
services.AddCacheManager<DateTime>(inline => inline.WithDictionaryHandle());
45+
46+
// any other type will be this. Configurastion used will be the one defined by AddCacheManagerConfiguration earlier.
3947
services.AddCacheManager();
4048
}
4149

src/CacheManager.Microsoft.Extensions.Configuration/ServiceCollectionExtensions.cs

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ public static class ServiceCollectionExtensions
1616
/// </summary>
1717
/// <param name="collection">The services collection.</param>
1818
/// <param name="configure">The <see cref="CacheManager.Core.ConfigurationBuilder"/> used for defining the <see cref="ICacheManagerConfiguration"/>.</param>
19-
/// <param name="name">The (optional) name to be used for the configuration.</param>
19+
/// <param name="name">The (optional) name to be used for the <see cref="ICacheManagerConfiguration"/>.</param>
2020
public static IServiceCollection AddCacheManagerConfiguration(this IServiceCollection collection, Action<CacheManager.Core.ConfigurationBuilder> configure, string name = null)
2121
{
22+
Guard.NotNull(collection, nameof(collection));
2223
Guard.NotNull(configure, nameof(configure));
2324
var builder = string.IsNullOrWhiteSpace(name) ?
2425
new CacheManager.Core.ConfigurationBuilder() :
@@ -38,6 +39,7 @@ public static IServiceCollection AddCacheManagerConfiguration(this IServiceColle
3839
/// <returns>The services collection</returns>
3940
public static IServiceCollection AddCacheManagerConfiguration(this IServiceCollection collection, IConfiguration fromConfiguration)
4041
{
42+
Guard.NotNull(collection, nameof(collection));
4143
Guard.NotNull(fromConfiguration, nameof(fromConfiguration));
4244
var configuration = fromConfiguration.GetCacheConfiguration();
4345
collection.AddSingleton(configuration);
@@ -53,6 +55,7 @@ public static IServiceCollection AddCacheManagerConfiguration(this IServiceColle
5355
/// <returns>The services collection</returns>
5456
public static IServiceCollection AddCacheManagerConfiguration(this IServiceCollection collection, IConfiguration fromConfiguration, string name)
5557
{
58+
Guard.NotNull(collection, nameof(collection));
5659
Guard.NotNull(fromConfiguration, nameof(fromConfiguration));
5760
var configuration = fromConfiguration.GetCacheConfiguration(name);
5861
collection.AddSingleton(configuration);
@@ -69,6 +72,7 @@ public static IServiceCollection AddCacheManagerConfiguration(this IServiceColle
6972
/// <returns>The services collection</returns>
7073
public static IServiceCollection AddCacheManagerConfiguration(this IServiceCollection collection, IConfiguration fromConfiguration, Action<CacheManager.Core.ConfigurationBuilder> configure)
7174
{
75+
Guard.NotNull(collection, nameof(collection));
7276
Guard.NotNull(fromConfiguration, nameof(fromConfiguration));
7377
Guard.NotNull(configure, nameof(configure));
7478

@@ -88,6 +92,7 @@ public static IServiceCollection AddCacheManagerConfiguration(this IServiceColle
8892
/// <returns>The services collection</returns>
8993
public static IServiceCollection AddCacheManagerConfiguration(this IServiceCollection collection, IConfiguration fromConfiguration, string name, Action<CacheManager.Core.ConfigurationBuilder> configure)
9094
{
95+
Guard.NotNull(collection, nameof(collection));
9196
Guard.NotNull(fromConfiguration, nameof(fromConfiguration));
9297
Guard.NotNull(configure, nameof(configure));
9398

@@ -110,6 +115,7 @@ public static IServiceCollection AddCacheManagerConfiguration(this IServiceColle
110115
/// <returns>The services collection.</returns>
111116
public static IServiceCollection AddCacheManager(this IServiceCollection collection)
112117
{
118+
Guard.NotNull(collection, nameof(collection));
113119
collection.AddSingleton(typeof(ICacheManager<>), typeof(BaseCacheManager<>));
114120

115121
return collection;
@@ -127,8 +133,11 @@ public static IServiceCollection AddCacheManager(this IServiceCollection collect
127133
/// <param name="configurationName">The name of the <see cref="ICacheManagerConfiguration"/> to use.</param>
128134
/// <param name="configure">Can be used to further configure the <see cref="ICacheManagerConfiguration"/>.</param>
129135
/// <returns>The services collection.</returns>
130-
public static IServiceCollection AddCacheManager<T>(this IServiceCollection collection, IConfiguration fromConfiguration = null, string configurationName = null, Action<CacheManager.Core.ConfigurationBuilder> configure = null)
136+
public static IServiceCollection AddCacheManager<T>(this IServiceCollection collection, IConfiguration fromConfiguration, string configurationName = null, Action<CacheManager.Core.ConfigurationBuilder> configure = null)
131137
{
138+
Guard.NotNull(collection, nameof(collection));
139+
Guard.NotNull(fromConfiguration, nameof(fromConfiguration));
140+
132141
collection.AddSingleton<ICacheManager<T>, BaseCacheManager<T>>((provider) =>
133142
{
134143
var configuration = string.IsNullOrWhiteSpace(configurationName) ? fromConfiguration.GetCacheConfiguration() : fromConfiguration.GetCacheConfiguration(configurationName);
@@ -140,5 +149,33 @@ public static IServiceCollection AddCacheManager<T>(this IServiceCollection coll
140149

141150
return collection;
142151
}
152+
153+
/// <summary>
154+
/// Adds a singleton service for <see cref="ICacheManager{TCacheValue}"/> for the specified <typeparamref name="T"/> to the <see cref="IServiceCollection"/>
155+
/// using the inline configuration defined by <paramref name="configure"/>.
156+
/// </summary>
157+
/// <param name="collection">The services collection.</param>
158+
/// <param name="configure">Used to configure the instance of <see cref="ICacheManager{TCacheValue}"/>.</param>
159+
/// <param name="name">The (optional) name for the <see cref="ICacheManagerConfiguration"/>.</param>
160+
/// <returns>The services collection.</returns>
161+
public static IServiceCollection AddCacheManager<T>(this IServiceCollection collection, Action<CacheManager.Core.ConfigurationBuilder> configure, string name = null)
162+
{
163+
Guard.NotNull(collection, nameof(collection));
164+
Guard.NotNull(configure, nameof(configure));
165+
166+
collection.AddSingleton<ICacheManager<T>, BaseCacheManager<T>>((provider) =>
167+
{
168+
Guard.NotNull(configure, nameof(configure));
169+
var builder = string.IsNullOrWhiteSpace(name) ?
170+
new CacheManager.Core.ConfigurationBuilder() :
171+
new CacheManager.Core.ConfigurationBuilder(name);
172+
173+
configure(builder);
174+
175+
return new BaseCacheManager<T>(builder.Build());
176+
});
177+
178+
return collection;
179+
}
143180
}
144181
}

src/CacheManager.Microsoft.Extensions.Logging/MicrosoftLoggingBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ private static ILoggerFactory GetLoggerFactory(IServiceCollection serviceCollect
7171
{
7272
var loggerFactoryDescriptor = serviceCollection.FirstOrDefault(p => p.ServiceType.Equals(typeof(ILoggerFactory)));
7373

74+
// relying on singleton here, which should be fine ~~ still hacked
7475
return loggerFactoryDescriptor?.ImplementationInstance as ILoggerFactory;
7576
}
7677
}

test/CacheManager.Tests/CacheManager.Tests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net452;netcoreapp1.1</TargetFrameworks>
4+
<TargetFrameworks>net452;<!--netcoreapp1.1--></TargetFrameworks>
55
<Version>1.0.0</Version>
66
<AssemblyName>CacheManager.Tests</AssemblyName>
77
<AssemblyOriginatorKeyFile>../../tools/key.snk</AssemblyOriginatorKeyFile>
@@ -53,7 +53,7 @@
5353
</ItemGroup>
5454

5555
<PropertyGroup Condition=" '$(TargetFramework)' == 'net452' ">
56-
<DefineConstants>$(DefineConstants);REDISENABLED;<!--MEMCACHEDENABLED-->;MOCK_HTTPCONTEXT_ENABLED;NO_APP_CONFIG</DefineConstants>
56+
<DefineConstants>$(DefineConstants);REDISENABLED;MEMCACHEDENABLED;MOCK_HTTPCONTEXT_ENABLED;NO_APP_CONFIG</DefineConstants>
5757
</PropertyGroup>
5858
<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp1.1' ">
5959
<DefineConstants>$(DefineConstants);REDISENABLED;NETCOREAPP</DefineConstants>

0 commit comments

Comments
 (0)