From cdd8a2ed4dd96e8cb0ce5be14a4dded805cfb9c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 18 Dec 2016 00:04:40 +0300 Subject: [PATCH] Fix TryAdd/Add error. --- ...ServiceCollectionRegistrationExtensions.cs | 67 ++++++++++--------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/src/Volo.DependencyInjection/Microsoft/Extensions/DependencyInjection/ServiceCollectionRegistrationExtensions.cs b/src/Volo.DependencyInjection/Microsoft/Extensions/DependencyInjection/ServiceCollectionRegistrationExtensions.cs index 291ee9a9d6..77da90e7ed 100644 --- a/src/Volo.DependencyInjection/Microsoft/Extensions/DependencyInjection/ServiceCollectionRegistrationExtensions.cs +++ b/src/Volo.DependencyInjection/Microsoft/Extensions/DependencyInjection/ServiceCollectionRegistrationExtensions.cs @@ -16,50 +16,30 @@ namespace Microsoft.Extensions.DependencyInjection public static IServiceCollection AddAssemblyOf(this IServiceCollection services) { - return services.AddAssemblyOf(false); + return services.InternalAddAssemblyOf(false); } public static IServiceCollection TryAddAssemblyOf(this IServiceCollection services) { - return services.AddAssemblyOf(true); + return services.InternalAddAssemblyOf(true); } - public static IServiceCollection AddAssembly(this IServiceCollection services, Assembly assembly) - { - return services.AddAssembly(assembly, false); - } - - public static IServiceCollection TryAddAssembly(this IServiceCollection services, Assembly assembly) - { - return services.AddAssembly(assembly, true); - } - - public static IServiceCollection AddTypes(this IServiceCollection services, params Type[] types) + internal static IServiceCollection InternalAddAssemblyOf(this IServiceCollection services, bool tryAdd) { - return services.AddTypes(false, types); + return services.InternalAddAssembly(typeof(T).GetTypeInfo().Assembly, tryAdd); } - public static IServiceCollection TryAddTypes(this IServiceCollection services, params Type[] types) - { - return services.AddTypes(true, types); - } - - public static IServiceCollection AddType(this IServiceCollection services, Type type) - { - return services.AddType(type, false); - } - - public static IServiceCollection TryAddType(this IServiceCollection services, Type type) + public static IServiceCollection AddAssembly(this IServiceCollection services, Assembly assembly) { - return services.AddType(type, true); + return services.InternalAddAssembly(assembly, false); } - internal static IServiceCollection AddAssemblyOf(this IServiceCollection services, bool tryAdd) + public static IServiceCollection TryAddAssembly(this IServiceCollection services, Assembly assembly) { - return services.AddAssembly(typeof(T).GetTypeInfo().Assembly, tryAdd); + return services.InternalAddAssembly(assembly, true); } - internal static IServiceCollection AddAssembly(this IServiceCollection services, Assembly assembly, bool tryAdd) + internal static IServiceCollection InternalAddAssembly(this IServiceCollection services, Assembly assembly, bool tryAdd) { var types = AssemblyHelper .GetAllTypes(assembly) @@ -72,10 +52,20 @@ namespace Microsoft.Extensions.DependencyInjection !typeInfo.IsDefined(typeof(SkipAutoRegistrationAttribute)); }); - return services.AddTypes(tryAdd, types.ToArray()); + return services.InternalAddTypes(tryAdd, types.ToArray()); } - internal static IServiceCollection AddTypes(this IServiceCollection services, bool tryAdd, params Type[] types) + public static IServiceCollection AddTypes(this IServiceCollection services, params Type[] types) + { + return services.InternalAddTypes(false, types); + } + + public static IServiceCollection TryAddTypes(this IServiceCollection services, params Type[] types) + { + return services.InternalAddTypes(true, types); + } + + internal static IServiceCollection InternalAddTypes(this IServiceCollection services, bool tryAdd, params Type[] types) { foreach (var type in types) { @@ -85,6 +75,16 @@ namespace Microsoft.Extensions.DependencyInjection return services; } + public static IServiceCollection AddType(this IServiceCollection services, Type type) + { + return services.AddType(type, false); + } + + public static IServiceCollection TryAddType(this IServiceCollection services, Type type) + { + return services.AddType(type, true); + } + internal static IServiceCollection AddType(this IServiceCollection services, Type type, bool tryAdd) { var lifeTime = GetServiceLifeTime(type); @@ -96,13 +96,14 @@ namespace Microsoft.Extensions.DependencyInjection foreach (var serviceType in AutoRegistrationHelper.GetExposedServices(type)) { var serviceDescriptor = ServiceDescriptor.Describe(serviceType, type, lifeTime.Value); + if (tryAdd) { - services.Add(serviceDescriptor); + services.TryAdd(serviceDescriptor); } else { - services.TryAdd(serviceDescriptor); + services.Add(serviceDescriptor); } }