diff --git a/src/Volo.DependencyInjection/Microsoft/Extensions/DependencyInjection/ServiceCollectionConventionalRegistrationExtensions.cs b/src/Volo.DependencyInjection/Microsoft/Extensions/DependencyInjection/ServiceCollectionConventionalRegistrationExtensions.cs index 409f018b8b..d8066fa21e 100644 --- a/src/Volo.DependencyInjection/Microsoft/Extensions/DependencyInjection/ServiceCollectionConventionalRegistrationExtensions.cs +++ b/src/Volo.DependencyInjection/Microsoft/Extensions/DependencyInjection/ServiceCollectionConventionalRegistrationExtensions.cs @@ -3,11 +3,6 @@ using Volo.DependencyInjection; namespace Microsoft.Extensions.DependencyInjection { - /* TODO: String IConventionalRegistrar objects in a static Dictionary - * may cause a performance problem if we create too many short lived IServiceCollection instances. - * Normally, an application will have a single IServiceCollection instance, but we should consider edge cases is there are. - */ - public static class ServiceCollectionConventionalRegistrationExtensions { public static IServiceCollection AddConventionalRegistrar(this IServiceCollection services, IConventionalRegistrar registrar) diff --git a/test/Volo.DependencyInjection.Tests/Microsoft/Extensions/DependencyInjection/AbpConventionalDependencyInjectionExtensions_Tests.cs b/test/Volo.DependencyInjection.Tests/Microsoft/Extensions/DependencyInjection/AbpConventionalDependencyInjectionExtensions_Tests.cs index c9e4126838..367757b8f8 100644 --- a/test/Volo.DependencyInjection.Tests/Microsoft/Extensions/DependencyInjection/AbpConventionalDependencyInjectionExtensions_Tests.cs +++ b/test/Volo.DependencyInjection.Tests/Microsoft/Extensions/DependencyInjection/AbpConventionalDependencyInjectionExtensions_Tests.cs @@ -5,9 +5,6 @@ using Xunit; namespace Microsoft.Extensions.DependencyInjection { - //TODO: Add unit test for: - // - IConventionalRegistrar - public class AbpConventionalDependencyInjectionExtensions_Tests { private readonly IServiceCollection _services; diff --git a/test/Volo.DependencyInjection.Tests/Volo/DependencyInjection/ConventionalRegistrar_Test.cs b/test/Volo.DependencyInjection.Tests/Volo/DependencyInjection/ConventionalRegistrar_Test.cs new file mode 100644 index 0000000000..ee20014d76 --- /dev/null +++ b/test/Volo.DependencyInjection.Tests/Volo/DependencyInjection/ConventionalRegistrar_Test.cs @@ -0,0 +1,49 @@ +using System; +using Microsoft.Extensions.DependencyInjection; + +namespace Volo.DependencyInjection +{ + public class ConventionalRegistrar_Tests + { + public void Should_Use_Custom_Conventions_If_Added() + { + //Arrange + var services = new ServiceCollection(); + + //Act + services.AddConventionalRegistrar(new MyCustomConventionalRegistrar()); + services.AddTypes(typeof(MyCustomClass), typeof(MyClass), typeof(MyNonRegisteredClass)); + + //Assert + services.ShouldContainTransient(typeof(MyClass)); //Registered by default convention. + services.ShouldContainSingleton(typeof(MyCustomClass)); //Registered by custom convention. + services.ShouldNotContainService(typeof(MyNonRegisteredClass)); //Not registered by any convention. + } + + public class MyCustomConventionalRegistrar : ConventionalRegistrarBase + { + public override void AddType(IServiceCollection services, Type type) + { + if (type == typeof(MyClass)) + { + services.AddSingleton(); + } + } + } + + public class MyCustomClass + { + + } + + public class MyNonRegisteredClass + { + + } + + public class MyClass : ITransientDependency + { + + } + } +}