Browse Source

Refactor conventional dependency registration classes.

pull/1810/head
Halil İbrahim Kalkan 7 years ago
parent
commit
dcbd40a099
  1. 7
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalDependencyRegistrar.cs
  2. 19
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs
  3. 22
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultConventionalRegistrar.cs
  4. 14
      framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs

7
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DependencyInjection/AbpAspNetCoreMvcConventionalDependencyRegistrar.cs

@ -7,10 +7,15 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.DependencyInjection namespace Volo.Abp.AspNetCore.Mvc.DependencyInjection
{ {
public class AbpAspNetCoreMvcConventionalRegistrar : DefaultConventionalRegistrar public class AbpAspNetCoreMvcConventionalRegistrar : ConventionalRegistrarBase
{ {
public override void AddType(IServiceCollection services, Type type) public override void AddType(IServiceCollection services, Type type)
{ {
if (IsConventionalRegistrationDisabled(type))
{
return;
}
if (!IsMvcService(type)) if (!IsMvcService(type))
{ {
return; return;

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

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -31,5 +32,23 @@ namespace Volo.Abp.DependencyInjection
} }
public abstract void AddType(IServiceCollection services, Type type); public abstract void AddType(IServiceCollection services, Type type);
protected virtual bool IsConventionalRegistrationDisabled(Type type)
{
return type.IsDefined(typeof(DisableConventionalRegistrationAttribute), true);
}
protected virtual void TriggerServiceExposing(IServiceCollection services, Type implementationType, List<Type> serviceTypes)
{
var exposeActions = services.GetExposingActionList();
if (exposeActions.Any())
{
var args = new OnServiceExposingContext(implementationType, serviceTypes);
foreach (var action in exposeActions)
{
action(args);
}
}
}
} }
} }

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

@ -1,6 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection; using System.Reflection;
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -48,25 +46,7 @@ namespace Volo.Abp.DependencyInjection
} }
} }
} }
protected virtual void TriggerServiceExposing(IServiceCollection services, Type type, List<Type> serviceTypes)
{
var exposeActions = services.GetExposingActionList();
if (exposeActions.Any())
{
var args = new OnServiceExposingContext(type, serviceTypes);
foreach (var action in exposeActions)
{
action(args);
}
}
}
protected virtual bool IsConventionalRegistrationDisabled(Type type)
{
return type.IsDefined(typeof(DisableConventionalRegistrationAttribute), true);
}
protected virtual DependencyAttribute GetDependencyAttributeOrNull(Type type) protected virtual DependencyAttribute GetDependencyAttributeOrNull(Type type)
{ {
return type.GetCustomAttribute<DependencyAttribute>(true); return type.GetCustomAttribute<DependencyAttribute>(true);

14
framework/src/Volo.Abp.FluentValidation/Volo/Abp/FluentValidation/AbpFluentValidationConventionalRegistrar.cs

@ -1,14 +1,20 @@
using System; using System;
using System.Collections.Generic;
using FluentValidation; using FluentValidation;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace Volo.Abp.FluentValidation namespace Volo.Abp.FluentValidation
{ {
public class AbpFluentValidationConventionalRegistrar : DefaultConventionalRegistrar public class AbpFluentValidationConventionalRegistrar : ConventionalRegistrarBase
{ {
public override void AddType(IServiceCollection services, Type type) public override void AddType(IServiceCollection services, Type type)
{ {
if (IsConventionalRegistrationDisabled(type))
{
return;
}
if (!typeof(IValidator).IsAssignableFrom(type)) if (!typeof(IValidator).IsAssignableFrom(type))
{ {
return; return;
@ -20,8 +26,12 @@ namespace Volo.Abp.FluentValidation
return; return;
} }
var serviceType = typeof(IValidator<>).MakeGenericType(validatingType);
TriggerServiceExposing(services, type, new List<Type>{ serviceType });
services.AddTransient( services.AddTransient(
typeof(IValidator<>).MakeGenericType(validatingType), serviceType,
type type
); );
} }

Loading…
Cancel
Save