Skip to content

Commit

Permalink
Fix error message to be more helpful (#33)
Browse files Browse the repository at this point in the history
* Fix error emssage to be more helpful

* add some tests

* remove unused code

* add some more assertions
  • Loading branch information
dicko2 authored Aug 23, 2023
1 parent aab7db6 commit 44e083e
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 17 deletions.
11 changes: 8 additions & 3 deletions src/Agoda.IoC.Core/RegistrationFailedException.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace Agoda.IoC.Core
{
[Serializable]
public class RegistrationFailedException : Exception
{
private readonly List<RegistrationContextException> _registrationContextExceptions;

public List<RegistrationContextException> RegistrationContextExceptions => _registrationContextExceptions;

Check warning on line 12 in src/Agoda.IoC.Core/RegistrationFailedException.cs

View workflow job for this annotation

GitHub Actions / Build Package

Ensure that publicly exposed IEnumerable types

public RegistrationFailedException(string message)
: base(message)
{
}

private RegistrationFailedException(SerializationInfo info, StreamingContext context)
: base(info, context)
public RegistrationFailedException(string message, List<RegistrationContextException> errors)
: base(message)
{
_registrationContextExceptions = errors;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using Agoda.IoC.Core;
using System;
using Agoda.IoC.Core;
using Agoda.IoC.ProjectUnderTest.Invalid12;
using Microsoft.Extensions.DependencyInjection;
using NUnit.Framework;
using Shouldly;

namespace Agoda.IoC.NetCore.UnitTests
{
Expand All @@ -19,6 +21,20 @@ public void RegisterByAttribute_WithAmbiguousRegistration_Throws()
{
options.OnRegistrationContextException = exception => { };
}));
try
{
container.AutoWireAssembly(new[]
{
typeof(AmbiguousRegistration).Assembly
}, false);
}
catch (RegistrationFailedException registrationFailedException)
{
registrationFailedException.RegistrationContextExceptions.Count.ShouldBe(1);
registrationFailedException.RegistrationContextExceptions[0].Message.ShouldContain("AmbiguousRegistration");
registrationFailedException.RegistrationContextExceptions[0].RegistrationContext.ShouldNotBeNull();
registrationFailedException.RegistrationContextExceptions[0].RegistrationContext.Validation.IsValid.ShouldBeFalse();
}
}
}
}
26 changes: 13 additions & 13 deletions src/Agoda.IoC.NetCore/StartupExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ public static IServiceCollection AutoWireAssembly<T>(
))
.ToList();

if (!Validate(registrations, containerRegistrationOption))
if (!Validate(registrations, containerRegistrationOption, out var errors))
{
throw new RegistrationFailedException("There are validations error!!!");
throw new RegistrationFailedException("There are validations errors, please see RegistrationContextExceptions Property for details", errors);
}

foreach (var reg in registrations)
Expand Down Expand Up @@ -151,19 +151,19 @@ private static void RegisterKeyedFactory(this IServiceCollection services, IDict
}
}

private static bool Validate(List<RegistrationContext> registrations, ContainerRegistrationOption containerRegistrationOption)
private static bool Validate(List<RegistrationContext> registrations, ContainerRegistrationOption containerRegistrationOption, out List<RegistrationContextException> errors)
{
bool isValid = true;
registrations.ForEach(reg =>
var isValid = true;
errors = new List<RegistrationContextException>();
foreach (var registration in registrations.Where(registration => !registration.Validation.IsValid))
{
if (!reg.Validation.IsValid)
{
isValid = false;
containerRegistrationOption
.OnRegistrationContextException?
.Invoke(new RegistrationContextException(reg, reg.Validation.ErrorMessage));
}
});
isValid = false;
var exception = new RegistrationContextException(registration, registration.Validation.ErrorMessage);
errors.Add(exception);
containerRegistrationOption
.OnRegistrationContextException?
.Invoke(exception);
}
return isValid;
}
}
Expand Down

0 comments on commit 44e083e

Please sign in to comment.