Skip to content

Commit 39a45a2

Browse files
committed
Added functionality for configuring default naming options for different catalogs.
Breaking change: Added NugetFeedPluginCatalogOptions and changed NugetFeedPluginCatalog to use the options class instead of NugetPluginCatalogOptions.
1 parent c728a0f commit 39a45a2

15 files changed

Lines changed: 363 additions & 26 deletions

src/Weikio.PluginFramework.Catalogs.NuGet/NugetFeedPluginCatalog.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ public class NugetFeedPluginCatalog : IPluginCatalog
2121
private readonly HashSet<string> _pluginAssemblyNames = new HashSet<string>();
2222

2323
private List<NugetPackagePluginCatalog> _pluginCatalogs = new List<NugetPackagePluginCatalog>();
24-
private readonly NugetPluginCatalogOptions _options;
24+
private readonly NugetFeedPluginCatalogOptions _options;
2525

2626
public string PackagesFolder { get; }
2727

2828
public NugetFeedPluginCatalog(NuGetFeed packageFeed, string searchTerm = null,
2929
bool includePrereleases = false, int maxPackages = 128,
30-
string packagesFolder = null, Action<TypeFinderCriteriaBuilder> configureFinder = null, Dictionary<string, TypeFinderCriteria> criterias = null, NugetPluginCatalogOptions options = null)
30+
string packagesFolder = null, Action<TypeFinderCriteriaBuilder> configureFinder = null, Dictionary<string, TypeFinderCriteria> criterias = null, NugetFeedPluginCatalogOptions options = null)
3131
{
3232
_packageFeed = packageFeed;
3333
_searchTerm = searchTerm;
@@ -46,7 +46,7 @@ public NugetFeedPluginCatalog(NuGetFeed packageFeed, string searchTerm = null,
4646
criterias = new Dictionary<string, TypeFinderCriteria>();
4747
}
4848

49-
_options = options ?? new NugetPluginCatalogOptions();
49+
_options = options ?? new NugetFeedPluginCatalogOptions();
5050

5151
if (configureFinder != null)
5252
{
@@ -93,7 +93,7 @@ public async Task Initialize()
9393

9494
foreach (var packageAndRepo in packages)
9595
{
96-
var options = new NugetPluginCatalogOptions() { TypeFinderOptions = _options.TypeFinderOptions };
96+
var options = new NugetPluginCatalogOptions() { TypeFinderOptions = _options.TypeFinderOptions, PluginNameOptions = _options.PluginNameOptions};
9797

9898
var packageCatalog = new NugetPackagePluginCatalog(packageAndRepo.Package.Identity.Id, packageAndRepo.Package.Identity.Version.ToString(),
9999
_includePrereleases, _packageFeed, PackagesFolder, options: options);
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System;
2+
using NuGet.Common;
3+
using Weikio.PluginFramework.Abstractions;
4+
using Weikio.PluginFramework.Catalogs.NuGet.PackageManagement;
5+
using Weikio.PluginFramework.TypeFinding;
6+
7+
namespace Weikio.PluginFramework.Catalogs.NuGet
8+
{
9+
public class NugetFeedPluginCatalogOptions
10+
{
11+
/// <summary>
12+
/// Gets or sets the function which is used to create the logger for Nuget activities
13+
/// </summary>
14+
public Func <ILogger> LoggerFactory { get; set; } = Defaults.LoggerFactory;
15+
16+
/// <summary>
17+
/// Gets or sets the <see cref="TypeFinderOptions"/>.
18+
/// </summary>
19+
public TypeFinderOptions TypeFinderOptions { get; set; } = new TypeFinderOptions();
20+
21+
/// <summary>
22+
/// Gets or sets how the plugin names and version should be defined. <seealso cref="PluginNameOptions"/>.
23+
/// </summary>
24+
public PluginNameOptions PluginNameOptions { get; set; } = Defaults.PluginNameOptions;
25+
26+
public static class Defaults
27+
{
28+
/// <summary>
29+
/// Gets or sets the default function which is used to create the logger for PluginLoadContextOptions
30+
/// </summary>
31+
public static Func<ILogger> LoggerFactory { get; set; } = () => new ConsoleLogger();
32+
33+
public static PluginNameOptions PluginNameOptions { get; set; } = new PluginNameOptions();
34+
}
35+
}
36+
}

src/Weikio.PluginFramework.Catalogs.NuGet/NugetPackagePluginCatalog.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public async Task Initialize()
101101

102102
foreach (var pluginAssemblyFilePath in _pluginAssemblyFilePaths)
103103
{
104-
var options = new AssemblyPluginCatalogOptions { TypeFinderOptions = _options.TypeFinderOptions };
104+
var options = new AssemblyPluginCatalogOptions { TypeFinderOptions = _options.TypeFinderOptions, PluginNameOptions = _options.PluginNameOptions};
105105

106106
var assemblyCatalog = new AssemblyPluginCatalog(pluginAssemblyFilePath, options);
107107
await assemblyCatalog.Initialize();

src/Weikio.PluginFramework.Catalogs.NuGet/NugetPluginCatalogOptions.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using NuGet.Common;
3+
using Weikio.PluginFramework.Abstractions;
34
using Weikio.PluginFramework.Catalogs.NuGet.PackageManagement;
45
using Weikio.PluginFramework.TypeFinding;
56

@@ -17,12 +18,19 @@ public class NugetPluginCatalogOptions
1718
/// </summary>
1819
public TypeFinderOptions TypeFinderOptions { get; set; } = new TypeFinderOptions();
1920

21+
/// <summary>
22+
/// Gets or sets how the plugin names and version should be defined. <seealso cref="PluginNameOptions"/>.
23+
/// </summary>
24+
public PluginNameOptions PluginNameOptions { get; set; } = Defaults.PluginNameOptions;
25+
2026
public static class Defaults
2127
{
2228
/// <summary>
2329
/// Gets or sets the default function which is used to create the logger for PluginLoadContextOptions
2430
/// </summary>
2531
public static Func<ILogger> LoggerFactory { get; set; } = () => new ConsoleLogger();
32+
33+
public static PluginNameOptions PluginNameOptions { get; set; } = new PluginNameOptions();
2634
}
2735
}
2836
}

src/Weikio.PluginFramework.Catalogs.NuGet/Weikio.PluginFramework.Catalogs.NuGet.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<PackageReference Include="NuGet.Protocol" Version="5.6.0" />
2222
<PackageReference Include="NuGet.Resolver" Version="5.6.0" />
2323
<PackageReference Include="MinVer" Version="2.0.*" />
24-
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.5"/>
24+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.5" />
2525
</ItemGroup>
2626

2727
<ItemGroup>

src/Weikio.PluginFramework/Catalogs/AssemblyPluginCatalogOptions.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,20 @@ public class AssemblyPluginCatalogOptions
1515

1616
[Obsolete("Please use TypeFinderOptions. This will be removed in a future release.")]
1717
public Dictionary<string, TypeFinderCriteria> TypeFinderCriterias = new Dictionary<string, TypeFinderCriteria>();
18-
18+
1919
/// <summary>
2020
/// Gets or sets how the plugin names and version should be defined. <seealso cref="PluginNameOptions"/>.
2121
/// </summary>
22-
public PluginNameOptions PluginNameOptions { get; set; } = new PluginNameOptions();
22+
public PluginNameOptions PluginNameOptions { get; set; } = Defaults.PluginNameOptions;
2323

2424
/// <summary>
2525
/// Gets or sets the <see cref="TypeFinderOptions"/>.
2626
/// </summary>
2727
public TypeFinderOptions TypeFinderOptions { get; set; } = new TypeFinderOptions();
28+
29+
public static class Defaults
30+
{
31+
public static PluginNameOptions PluginNameOptions { get; set; } = new PluginNameOptions();
32+
}
2833
}
2934
}

src/Weikio.PluginFramework/Catalogs/CompositePluginCatalog.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4-
using System.Reflection;
54
using System.Threading.Tasks;
65
using Weikio.PluginFramework.Abstractions;
76

src/Weikio.PluginFramework/Catalogs/FolderPluginCatalogOptions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ public class FolderPluginCatalogOptions
4646
/// <summary>
4747
/// Gets or sets how the plugin names and version should be defined. <seealso cref="PluginNameOptions"/>
4848
/// </summary>
49-
public PluginNameOptions PluginNameOptions { get; set; } = new PluginNameOptions();
49+
public PluginNameOptions PluginNameOptions { get; set; } = Defaults.PluginNameOptions;
50+
51+
public static class Defaults
52+
{
53+
public static PluginNameOptions PluginNameOptions { get; set; } = new PluginNameOptions();
54+
}
5055

5156
}
5257
}

src/Weikio.PluginFramework/Catalogs/TypePluginCatalogOptions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class TypePluginCatalogOptions
1313
/// <summary>
1414
/// Gets or sets how the plugin names and version should be defined. <seealso cref="PluginNameOptions"/>.
1515
/// </summary>
16-
public PluginNameOptions PluginNameOptions { get; set; } = new PluginNameOptions();
16+
public PluginNameOptions PluginNameOptions { get; set; } = Defaults.PluginNameOptions;
1717

1818
[Obsolete("Please use TypeFinderOptions. This will be removed in a future release.")]
1919
public Dictionary<string, TypeFinderCriteria> TypeFinderCriterias = new Dictionary<string, TypeFinderCriteria>();
@@ -27,5 +27,10 @@ public class TypePluginCatalogOptions
2727
/// Gets or sets the <see cref="ITypeFindingContext"/>.
2828
/// </summary>
2929
public ITypeFindingContext TypeFindingContext { get; set; } = null;
30+
31+
public static class Defaults
32+
{
33+
public static PluginNameOptions PluginNameOptions { get; set; } = new PluginNameOptions();
34+
}
3035
}
3136
}

tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetFeedPluginCatalogTests.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Threading.Tasks;
77
using Weikio.PluginFramework.Abstractions;
88
using Weikio.PluginFramework.Catalogs;
9+
using Weikio.PluginFramework.Catalogs.NuGet;
910
using Xunit;
1011

1112
namespace PluginFramework.Catalogs.NuGet.Tests
@@ -70,5 +71,51 @@ public async Task CanTag()
7071
// Assert
7172
Assert.Equal("MockSolutions", plugin.Tag);
7273
}
74+
75+
[Fact]
76+
public async Task CanConfigureNamingOptions()
77+
{
78+
var options = new NugetFeedPluginCatalogOptions()
79+
{
80+
PluginNameOptions = new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" }
81+
};
82+
83+
// Arrange
84+
var feed = new NuGetFeed("nuget.org", "https://api.nuget.org/v3/index.json");
85+
var catalog = new NugetFeedPluginCatalog(feed, searchTerm: "tags:mocking", maxPackages: 1, configureFinder: configure =>
86+
{
87+
configure.HasName("Moq.Range");
88+
}, options: options);
89+
90+
// Act
91+
await catalog.Initialize();
92+
var plugin = catalog.Single();
93+
94+
// Assert
95+
Assert.EndsWith("Modified", plugin.Name);
96+
}
97+
98+
[Fact]
99+
public async Task CanConfigureDefaultNamingOptions()
100+
{
101+
NugetFeedPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions()
102+
{
103+
PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified"
104+
};
105+
106+
// Arrange
107+
var feed = new NuGetFeed("nuget.org", "https://api.nuget.org/v3/index.json");
108+
var catalog = new NugetFeedPluginCatalog(feed, searchTerm: "tags:mocking", maxPackages: 1, configureFinder: configure =>
109+
{
110+
configure.HasName("Moq.Range");
111+
});
112+
113+
// Act
114+
await catalog.Initialize();
115+
var plugin = catalog.Single();
116+
117+
// Assert
118+
Assert.EndsWith("Modified", plugin.Name);
119+
}
73120
}
74121
}

0 commit comments

Comments
 (0)