Browse Source

Refactor exposed services.

pull/1156/head
Halil ibrahim Kalkan 7 years ago
parent
commit
a975f28c95
  1. 53
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/AutoRegistrationHelper.cs
  2. 2
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultConventionalRegistrar.cs
  3. 36
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs
  4. 19
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposedServiceExplorer.cs
  5. 4
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs

53
framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/AutoRegistrationHelper.cs

@ -1,53 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.DependencyInjection;
namespace Volo.Abp.DependencyInjection
{
public static class AutoRegistrationHelper
{
public static List<Type> GetExposedServices(IServiceCollection services, Type type)
{
var typeInfo = type.GetTypeInfo();
var customExposedServices = typeInfo
.GetCustomAttributes()
.OfType<IExposedServiceTypesProvider>()
.SelectMany(p => p.GetExposedServiceTypes(type))
.ToList();
if (customExposedServices.Any())
{
return customExposedServices;
}
return GetDefaultExposedServices(type);
}
private static List<Type> GetDefaultExposedServices(Type type)
{
var serviceTypes = new List<Type>();
serviceTypes.Add(type);
foreach (var interfaceType in type.GetTypeInfo().GetInterfaces())
{
var interfaceName = interfaceType.Name;
if (interfaceName.StartsWith("I"))
{
interfaceName = interfaceName.Right(interfaceName.Length - 1);
}
if (type.Name.EndsWith(interfaceName))
{
serviceTypes.Add(interfaceType);
}
}
return serviceTypes;
}
}
}

2
framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultConventionalRegistrar.cs

@ -26,7 +26,7 @@ namespace Volo.Abp.DependencyInjection
return;
}
var serviceTypes = AutoRegistrationHelper.GetExposedServices(services, type);
var serviceTypes = ExposedServiceExplorer.GetExposedServices(type);
TriggerServiceExposing(services, type, serviceTypes);

36
framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs

@ -1,11 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace Volo.Abp.DependencyInjection
{
public class ExposeServicesAttribute : Attribute, IExposedServiceTypesProvider
{
public Type[] ExposedServiceTypes { get; }
public ExposeServicesAttribute(params Type[] exposedServiceTypes)
{
ExposedServiceTypes = exposedServiceTypes ?? new Type[0];
@ -13,7 +16,36 @@ namespace Volo.Abp.DependencyInjection
public Type[] GetExposedServiceTypes(Type targetType)
{
return ExposedServiceTypes;
if (ExposedServiceTypes.Any())
{
return ExposedServiceTypes;
}
return GetDefaultExposedServices(targetType).ToArray();
}
private static List<Type> GetDefaultExposedServices(Type type)
{
var serviceTypes = new List<Type>();
serviceTypes.Add(type);
foreach (var interfaceType in type.GetTypeInfo().GetInterfaces())
{
var interfaceName = interfaceType.Name;
if (interfaceName.StartsWith("I"))
{
interfaceName = interfaceName.Right(interfaceName.Length - 1);
}
if (type.Name.EndsWith(interfaceName))
{
serviceTypes.Add(interfaceType);
}
}
return serviceTypes;
}
}
}

19
framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposedServiceExplorer.cs

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace Volo.Abp.DependencyInjection
{
public static class ExposedServiceExplorer
{
public static List<Type> GetExposedServices(Type type)
{
return type
.GetCustomAttributes()
.OfType<IExposedServiceTypesProvider>()
.SelectMany(p => p.GetExposedServiceTypes(type))
.ToList();
}
}
}

4
framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs

@ -12,7 +12,7 @@ namespace Volo.Abp.DependencyInjection
{
//Act
var exposedServices = AutoRegistrationHelper.GetExposedServices(new ServiceCollection(), typeof(DefaultDerivedService)).ToList();
var exposedServices = ExposedServiceExplorer.GetExposedServices(typeof(DefaultDerivedService));
//Assert
@ -27,7 +27,7 @@ namespace Volo.Abp.DependencyInjection
{
//Act
var exposedServices = AutoRegistrationHelper.GetExposedServices(new ServiceCollection(), typeof(ExplicitDerivedService)).ToList();
var exposedServices = ExposedServiceExplorer.GetExposedServices(typeof(ExplicitDerivedService));
//Assert

Loading…
Cancel
Save