diff --git a/Directory.Build.props b/Directory.Build.props index 7c9542e..00eb0ba 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -18,6 +18,6 @@ MIT True - 0.6.1 + 0.6.2 \ No newline at end of file diff --git a/samples/ShowcaseWebApi/Extensions/WebApplicationBuilderExtensions.cs b/samples/ShowcaseWebApi/Extensions/WebApplicationBuilderExtensions.cs index e801f0d..fa86c54 100644 --- a/samples/ShowcaseWebApi/Extensions/WebApplicationBuilderExtensions.cs +++ b/samples/ShowcaseWebApi/Extensions/WebApplicationBuilderExtensions.cs @@ -87,7 +87,7 @@ public static WebApplicationBuilder AddWebServices(this WebApplicationBuilder bu public static WebApplicationBuilder AddFeatures(this WebApplicationBuilder builder) { - builder.Services.AddModEndpointsFromAssembly(typeof(WebApplicationBuilderExtensions).Assembly); + builder.Services.AddModEndpointsFromAssemblyContaining(); builder.Services.AddValidatorsFromAssemblyContaining(includeInternalTypes: true); return builder; diff --git a/samples/ShowcaseWebApi/ShowcaseWebApi.csproj b/samples/ShowcaseWebApi/ShowcaseWebApi.csproj index 80d1c4d..74fb83c 100644 --- a/samples/ShowcaseWebApi/ShowcaseWebApi.csproj +++ b/samples/ShowcaseWebApi/ShowcaseWebApi.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/ModEndpoints.Core/DependencyInjectionExtensions.cs b/src/ModEndpoints.Core/DependencyInjectionExtensions.cs index 817704d..12d9d5d 100644 --- a/src/ModEndpoints.Core/DependencyInjectionExtensions.cs +++ b/src/ModEndpoints.Core/DependencyInjectionExtensions.cs @@ -9,18 +9,28 @@ namespace ModEndpoints.Core; public static class DependencyInjectionExtensions { - public static IServiceCollection AddModEndpointsFromAssemblyCore( + public static IServiceCollection AddModEndpointsCoreFromAssemblyContaining( this IServiceCollection services, - Assembly assembly) + Assembly assembly, + ServiceLifetime lifetime = ServiceLifetime.Transient) + { + return services.AddModEndpointsCoreFromAssembly(typeof(T).Assembly, lifetime); + } + + public static IServiceCollection AddModEndpointsCoreFromAssembly( + this IServiceCollection services, + Assembly assembly, + ServiceLifetime lifetime = ServiceLifetime.Transient) { return services - .AddRouteGroupsFromAssemblyCore(assembly) - .AddEndpointsFromAssemblyCore(assembly); + .AddRouteGroupsCoreFromAssembly(assembly, lifetime) + .AddEndpointsCoreFromAssembly(assembly, lifetime); } - private static IServiceCollection AddRouteGroupsFromAssemblyCore( + private static IServiceCollection AddRouteGroupsCoreFromAssembly( this IServiceCollection services, - Assembly assembly) + Assembly assembly, + ServiceLifetime lifetime) { //Don't add RootRouteGroup, it's just a marker class to define root //Normally its assembly won't be loaded with this method anyway but just in case @@ -29,7 +39,7 @@ private static IServiceCollection AddRouteGroupsFromAssemblyCore( .Where(type => type is { IsAbstract: false, IsInterface: false } && type.IsAssignableTo(typeof(IRouteGroupConfigurator)) && type != typeof(RootRouteGroup)) - .Select(type => ServiceDescriptor.KeyedTransient(typeof(IRouteGroupConfigurator), type, type)) + .Select(type => ServiceDescriptor.DescribeKeyed(typeof(IRouteGroupConfigurator), type, type, lifetime)) .ToArray(); services.TryAddEnumerable(serviceDescriptors); @@ -37,9 +47,10 @@ private static IServiceCollection AddRouteGroupsFromAssemblyCore( return services; } - public static IServiceCollection AddEndpointsFromAssemblyCore( + public static IServiceCollection AddEndpointsCoreFromAssembly( this IServiceCollection services, - Assembly assembly) + Assembly assembly, + ServiceLifetime lifetime) { var endpointTypes = assembly .DefinedTypes @@ -49,7 +60,7 @@ public static IServiceCollection AddEndpointsFromAssemblyCore( CheckServiceEndpointRegistrations(endpointTypes); var serviceDescriptors = endpointTypes - .Select(type => ServiceDescriptor.KeyedTransient(typeof(IEndpointConfigurator), type, type)) + .Select(type => ServiceDescriptor.DescribeKeyed(typeof(IEndpointConfigurator), type, type, lifetime)) .ToArray(); services.TryAddEnumerable(serviceDescriptors); diff --git a/src/ModEndpoints.RemoteServices/ModEndpoints.RemoteServices.csproj b/src/ModEndpoints.RemoteServices/ModEndpoints.RemoteServices.csproj index 090162f..d9f9f94 100644 --- a/src/ModEndpoints.RemoteServices/ModEndpoints.RemoteServices.csproj +++ b/src/ModEndpoints.RemoteServices/ModEndpoints.RemoteServices.csproj @@ -22,7 +22,7 @@ - + diff --git a/src/ModEndpoints/DependencyInjectionExtensions.cs b/src/ModEndpoints/DependencyInjectionExtensions.cs index 29cc983..990d00c 100644 --- a/src/ModEndpoints/DependencyInjectionExtensions.cs +++ b/src/ModEndpoints/DependencyInjectionExtensions.cs @@ -8,9 +8,17 @@ namespace ModEndpoints; public static class DependencyInjectionExtensions { + public static IServiceCollection AddModEndpointsFromAssemblyContaining( + this IServiceCollection services, + ServiceLifetime lifetime = ServiceLifetime.Transient) + { + return services.AddModEndpointsFromAssembly(typeof(T).Assembly, lifetime); + } + public static IServiceCollection AddModEndpointsFromAssembly( this IServiceCollection services, - Assembly assembly) + Assembly assembly, + ServiceLifetime lifetime = ServiceLifetime.Transient) { //WebResultEndpoint components services.TryAddKeyedSingleton( @@ -24,7 +32,7 @@ public static IServiceCollection AddModEndpointsFromAssembly( services.TryAddSingleton(); services.AddHttpContextAccessor(); - return services.AddModEndpointsFromAssemblyCore(assembly); + return services.AddModEndpointsCoreFromAssembly(assembly, lifetime); } public static WebApplication MapModEndpoints( diff --git a/src/ModEndpoints/ModEndpoints.csproj b/src/ModEndpoints/ModEndpoints.csproj index 6d0d89b..c4a6464 100644 --- a/src/ModEndpoints/ModEndpoints.csproj +++ b/src/ModEndpoints/ModEndpoints.csproj @@ -21,8 +21,8 @@ - - + +