44using EawModinfo . Spec ;
55using Microsoft . Extensions . DependencyInjection ;
66using Microsoft . Extensions . Logging ;
7- using PG . StarWarsGame . Infrastructure . Mods ;
87
98namespace PG . StarWarsGame . Infrastructure . Services . Name ;
109
1110/// <summary>
12- /// <see cref="IModNameResolver"/> which takes a sorted list of <see cref="IModNameResolver"/> and returns the first valid result.
11+ /// <see cref="IModNameResolver"/> which takes a sorted list of <see cref="IModNameResolver"/> and returns the first non-null or non-empty result.
1312/// </summary>
1413public sealed class CompositeModNameResolver : IModNameResolver
1514{
1615 private readonly IList < IModNameResolver > _resolvers ;
1716 private readonly ILogger ? _logger ;
1817
1918 /// <summary>
20- /// Create a new instance.
19+ /// Initializes a new instance of the <see cref="CompositeModNameResolver"/> class with a factory method for subsequent resolvers .
2120 /// </summary>
2221 /// <param name="serviceProvider">The service provider.</param>
2322 /// <param name="resolverFactory">Factory method to create a list of <see cref="IModNameResolver"/>.</param>
2423 public CompositeModNameResolver ( IServiceProvider serviceProvider , Func < IServiceProvider , IList < IModNameResolver > > resolverFactory )
2524 {
2625 if ( serviceProvider == null )
2726 throw new ArgumentNullException ( nameof ( serviceProvider ) ) ;
28- if ( resolverFactory == null ) throw new ArgumentNullException ( nameof ( resolverFactory ) ) ;
27+ if ( resolverFactory == null )
28+ throw new ArgumentNullException ( nameof ( resolverFactory ) ) ;
2929 var resolvers = resolverFactory ( serviceProvider ) ;
3030 ThrowHelper . ThrowIfCollectionNullOrEmpty ( resolvers ) ;
3131 _resolvers = resolvers ;
3232 _logger = serviceProvider . GetService < ILoggerFactory > ( ) ? . CreateLogger ( GetType ( ) ) ;
3333 }
3434
3535 /// <inheritdoc/>
36- public string ResolveName ( IModReference modReference , CultureInfo culture )
36+ public string ? ResolveName ( IModReference modReference , CultureInfo culture )
3737 {
3838 if ( modReference == null )
3939 throw new ArgumentNullException ( nameof ( modReference ) ) ;
@@ -44,24 +44,19 @@ public string ResolveName(IModReference modReference, CultureInfo culture)
4444 {
4545 try
4646 {
47- try
48- {
49- _logger ? . LogDebug ( $ "Resolving mod name with { nameResolver } ") ;
50- var name = nameResolver . ResolveName ( modReference , culture ) ;
51- if ( ! string . IsNullOrEmpty ( name ) )
52- return name ;
53- }
54- catch ( Exception e )
55- {
56- throw new ModException ( modReference , "Error while resolving a mod's name" , e ) ;
57- }
47+ _logger ? . LogDebug ( $ "Resolving mod name with { nameResolver } ") ;
48+ var name = nameResolver . ResolveName ( modReference , culture ) ;
49+ if ( ! string . IsNullOrEmpty ( name ) )
50+ return name ;
5851 }
59- catch ( ModException e )
52+ catch ( Exception e )
6053 {
61- _logger ? . LogDebug ( e , e . Message ) ;
54+ _logger ? . LogDebug ( e , $ "Error while resolving mod name for '{ modReference } ' with resolver { nameResolver . GetType ( ) } : { e . Message } ") ;
55+ throw ;
6256 }
6357 }
6458
65- throw new ModException ( modReference , "Unable to resolve the mod's name." ) ;
59+ _logger ? . LogTrace ( $ "Unable to resolve name for '{ modReference } '") ;
60+ return null ;
6661 }
6762}
0 commit comments