Skip to content

Commit

Permalink
Add TryAddCouchbaseBucket extension (#2)
Browse files Browse the repository at this point in the history
Motivation
----------
Need a way to registered a Couchbase bucket which won't register the
bucket again if it is already registered.

Modifications
-------------
Added TryAddCouchbaseBucket to IServiceCollection extensions, which uses
TryAddSingleton instead of AddSingleton to register the bucket.

Results
-------
Consumer can optionally use TryAddCouchbaseBucket, and if the bucket is
already registered it will be ignored.
  • Loading branch information
brantburnett authored Jan 25, 2017
1 parent 65da886 commit 21e3c6c
Showing 1 changed file with 59 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,29 @@ public static IServiceCollection AddCouchbase(this IServiceCollection services,
return services;
}

/// <summary>
/// Register an interface based on <see cref="INamedBucketProvider"/> which will be injected
/// with a specific bucket name.
/// </summary>
/// <typeparam name="T">Interface inherited from <see cref="INamedBucketProvider"/>. Must not add any members.</typeparam>
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
/// <param name="bucketName">The name of the Couchbase bucket.</param>
/// <returns>The <see cref="IServiceCollection"/>.</returns>
public static IServiceCollection AddCouchbaseBucket<T>(this IServiceCollection services, string bucketName)
where T: class, INamedBucketProvider
{
return services.AddCouchbaseBucket<T>(bucketName, null);
}

/// <summary>
/// Register an interface based on <see cref="INamedBucketProvider"/> which will be injected
/// with a specific bucket name.
/// </summary>
/// <typeparam name="T">Interface inherited from <see cref="INamedBucketProvider"/>. Must not add any members.</typeparam>
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
/// <param name="bucketName">The name of the Couchbase bucket.</param>
/// <param name="password">The bucket password.</param>
/// <returns>The <see cref="IServiceCollection"/>.</returns>
public static IServiceCollection AddCouchbaseBucket<T>(this IServiceCollection services, string bucketName,
string password)
where T : class, INamedBucketProvider
Expand All @@ -77,5 +94,47 @@ public static IServiceCollection AddCouchbaseBucket<T>(this IServiceCollection s

return services;
}

/// <summary>
/// Register an interface based on <see cref="INamedBucketProvider"/> which will be injected
/// with a specific bucket name if the interface hasn't already been added.
/// </summary>
/// <typeparam name="T">Interface inherited from <see cref="INamedBucketProvider"/>. Must not add any members.</typeparam>
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
/// <param name="bucketName">The name of the Couchbase bucket.</param>
/// <returns>The <see cref="IServiceCollection"/>.</returns>
public static IServiceCollection TryAddCouchbaseBucket<T>(this IServiceCollection services, string bucketName)
where T : class, INamedBucketProvider
{
return services.AddCouchbaseBucket<T>(bucketName, null);
}

/// <summary>
/// Register an interface based on <see cref="INamedBucketProvider"/> which will be injected
/// with a specific bucket name if the interface hasn't already been added.
/// </summary>
/// <typeparam name="T">Interface inherited from <see cref="INamedBucketProvider"/>. Must not add any members.</typeparam>
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
/// <param name="bucketName">The name of the Couchbase bucket.</param>
/// <param name="password">The bucket password.</param>
/// <returns>The <see cref="IServiceCollection"/>.</returns>
public static IServiceCollection TryAddCouchbaseBucket<T>(this IServiceCollection services, string bucketName,
string password)
where T : class, INamedBucketProvider
{
if (bucketName == null)
{
throw new ArgumentNullException(nameof(bucketName));
}

services.TryAddSingleton(serviceProvider =>
{
var generator = serviceProvider.GetRequiredService<NamedBucketProxyGenerator>();

return generator.GetProxy<T>(serviceProvider.GetRequiredService<IBucketProvider>(), bucketName, password);
});

return services;
}
}
}

0 comments on commit 21e3c6c

Please sign in to comment.