diff --git a/samples/WebAppWithNuget/Startup.cs b/samples/WebAppWithNuget/Startup.cs index 7104f50..0d70300 100644 --- a/samples/WebAppWithNuget/Startup.cs +++ b/samples/WebAppWithNuget/Startup.cs @@ -40,7 +40,6 @@ public void ConfigureServices(IServiceCollection services) .AddPluginType(); services.AddControllers(); - } diff --git a/src/Weikio.PluginFramework.Abstractions/Weikio.PluginFramework.Abstractions.csproj b/src/Weikio.PluginFramework.Abstractions/Weikio.PluginFramework.Abstractions.csproj index 5da4200..a461635 100644 --- a/src/Weikio.PluginFramework.Abstractions/Weikio.PluginFramework.Abstractions.csproj +++ b/src/Weikio.PluginFramework.Abstractions/Weikio.PluginFramework.Abstractions.csproj @@ -19,7 +19,7 @@ - + \ No newline at end of file diff --git a/src/Weikio.PluginFramework.AspNetCore/PluginExtensions.cs b/src/Weikio.PluginFramework.AspNetCore/PluginExtensions.cs index b3bc9e9..56f83f5 100644 --- a/src/Weikio.PluginFramework.AspNetCore/PluginExtensions.cs +++ b/src/Weikio.PluginFramework.AspNetCore/PluginExtensions.cs @@ -6,14 +6,14 @@ namespace Microsoft.Extensions.DependencyInjection { public static class PluginExtensions { - public static object Create(this Plugin plugin, IServiceProvider serviceProvider) + public static object Create(this Plugin plugin, IServiceProvider serviceProvider, params object[] parameters) { - return ActivatorUtilities.CreateInstance(serviceProvider, plugin); + return ActivatorUtilities.CreateInstance(serviceProvider, plugin, parameters); } - public static T Create(this Plugin plugin, IServiceProvider serviceProvider) where T : class + public static T Create(this Plugin plugin, IServiceProvider serviceProvider, params object[] parameters) where T : class { - return ActivatorUtilities.CreateInstance(serviceProvider, plugin) as T; + return ActivatorUtilities.CreateInstance(serviceProvider, plugin, parameters) as T; } } } diff --git a/src/Weikio.PluginFramework.AspNetCore/Weikio.PluginFramework.AspNetCore.csproj b/src/Weikio.PluginFramework.AspNetCore/Weikio.PluginFramework.AspNetCore.csproj index b127aef..d93f201 100644 --- a/src/Weikio.PluginFramework.AspNetCore/Weikio.PluginFramework.AspNetCore.csproj +++ b/src/Weikio.PluginFramework.AspNetCore/Weikio.PluginFramework.AspNetCore.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/Weikio.PluginFramework.Catalogs.NuGet/NugetFeedPluginCatalog.cs b/src/Weikio.PluginFramework.Catalogs.NuGet/NugetFeedPluginCatalog.cs index 2b20d7f..8e715e0 100644 --- a/src/Weikio.PluginFramework.Catalogs.NuGet/NugetFeedPluginCatalog.cs +++ b/src/Weikio.PluginFramework.Catalogs.NuGet/NugetFeedPluginCatalog.cs @@ -27,7 +27,8 @@ public class NugetFeedPluginCatalog : IPluginCatalog public NugetFeedPluginCatalog(NuGetFeed packageFeed, string searchTerm = null, bool includePrereleases = false, int maxPackages = 128, - string packagesFolder = null, Action configureFinder = null, Dictionary criterias = null, NugetFeedPluginCatalogOptions options = null) + string packagesFolder = null, Action configureFinder = null, Dictionary criterias = null, + NugetFeedPluginCatalogOptions options = null) { _packageFeed = packageFeed; _searchTerm = searchTerm; diff --git a/src/Weikio.PluginFramework.Catalogs.NuGet/NugetPackagePluginCatalog.cs b/src/Weikio.PluginFramework.Catalogs.NuGet/NugetPackagePluginCatalog.cs index 1d67e3a..9c90017 100644 --- a/src/Weikio.PluginFramework.Catalogs.NuGet/NugetPackagePluginCatalog.cs +++ b/src/Weikio.PluginFramework.Catalogs.NuGet/NugetPackagePluginCatalog.cs @@ -92,7 +92,7 @@ public Plugin Get(string name, Version version) public async Task Initialize() { var nuGetDownloader = new NuGetDownloader(_options.LoggerFactory()); - var pluginAssemblyFileNames = await nuGetDownloader.DownloadAsync(PackagesFolder, _packageName, _packageVersion, _includePrerelease, _packageFeed); + var pluginAssemblyFileNames = await nuGetDownloader.DownloadAsync(PackagesFolder, _packageName, _packageVersion, _includePrerelease, _packageFeed, includeSecondaryRepositories: _options.IncludeSystemFeedsAsSecondary); foreach (var f in pluginAssemblyFileNames) { diff --git a/src/Weikio.PluginFramework.Catalogs.NuGet/NugetPluginCatalogOptions.cs b/src/Weikio.PluginFramework.Catalogs.NuGet/NugetPluginCatalogOptions.cs index d4177e9..482f6dd 100644 --- a/src/Weikio.PluginFramework.Catalogs.NuGet/NugetPluginCatalogOptions.cs +++ b/src/Weikio.PluginFramework.Catalogs.NuGet/NugetPluginCatalogOptions.cs @@ -23,6 +23,11 @@ public class NugetPluginCatalogOptions /// Gets or sets how the plugin names and version should be defined. . /// public PluginNameOptions PluginNameOptions { get; set; } = Defaults.PluginNameOptions; + + /// + /// Gets or sets if system feeds should be used as secondary feeds for finding packages when feed url is defined. + /// + public bool IncludeSystemFeedsAsSecondary { get; set; } = false; public static class Defaults { diff --git a/src/Weikio.PluginFramework.Catalogs.NuGet/Weikio.PluginFramework.Catalogs.NuGet.csproj b/src/Weikio.PluginFramework.Catalogs.NuGet/Weikio.PluginFramework.Catalogs.NuGet.csproj index 26297d3..805eb7e 100644 --- a/src/Weikio.PluginFramework.Catalogs.NuGet/Weikio.PluginFramework.Catalogs.NuGet.csproj +++ b/src/Weikio.PluginFramework.Catalogs.NuGet/Weikio.PluginFramework.Catalogs.NuGet.csproj @@ -15,14 +15,8 @@ - - - - - - - - + + diff --git a/src/Weikio.PluginFramework.Catalogs.Roslyn/Weikio.PluginFramework.Catalogs.Roslyn.csproj b/src/Weikio.PluginFramework.Catalogs.Roslyn/Weikio.PluginFramework.Catalogs.Roslyn.csproj index b727390..a66cd0e 100644 --- a/src/Weikio.PluginFramework.Catalogs.Roslyn/Weikio.PluginFramework.Catalogs.Roslyn.csproj +++ b/src/Weikio.PluginFramework.Catalogs.Roslyn/Weikio.PluginFramework.Catalogs.Roslyn.csproj @@ -15,7 +15,7 @@ - + diff --git a/src/Weikio.PluginFramework.Configuration/Weikio.PluginFramework.Configuration.csproj b/src/Weikio.PluginFramework.Configuration/Weikio.PluginFramework.Configuration.csproj index 40a1199..60bc864 100644 --- a/src/Weikio.PluginFramework.Configuration/Weikio.PluginFramework.Configuration.csproj +++ b/src/Weikio.PluginFramework.Configuration/Weikio.PluginFramework.Configuration.csproj @@ -16,7 +16,7 @@ - + diff --git a/src/Weikio.PluginFramework/Catalogs/FolderPluginCatalog.cs b/src/Weikio.PluginFramework/Catalogs/FolderPluginCatalog.cs index a146782..c96fa67 100644 --- a/src/Weikio.PluginFramework/Catalogs/FolderPluginCatalog.cs +++ b/src/Weikio.PluginFramework/Catalogs/FolderPluginCatalog.cs @@ -7,7 +7,6 @@ using System.Runtime.InteropServices; using System.Runtime.Loader; using System.Threading.Tasks; -using Microsoft.CodeAnalysis; using Weikio.PluginFramework.Abstractions; using Weikio.PluginFramework.Context; using Weikio.PluginFramework.TypeFinding; @@ -235,6 +234,26 @@ private bool IsPluginAssembly(string assemblyPath) paths = paths.Distinct().ToList(); + // Also make sure to include only one dll of each. If same dll is found from multiple locations, use the first found dll and remove the others. + var duplicateDlls = paths.Select(x => new {FullPath = x, FileName = Path.GetFileName(x)}).GroupBy(x => x.FileName) + .Where(x => x.Count() > 1) + .ToList(); + + var removed = new List(); + + foreach (var duplicateDll in duplicateDlls) + { + foreach (var duplicateDllPath in duplicateDll.Skip(1)) + { + removed.Add(duplicateDllPath.FullPath); + } + } + + foreach (var re in removed) + { + paths.Remove(re); + } + var resolver = new PathAssemblyResolver(paths); // We use the metadata (readonly) versions of the assemblies before loading them diff --git a/src/Weikio.PluginFramework/Context/PluginAssemblyLoadContext.cs b/src/Weikio.PluginFramework/Context/PluginAssemblyLoadContext.cs index 9a0a501..f4304e1 100644 --- a/src/Weikio.PluginFramework/Context/PluginAssemblyLoadContext.cs +++ b/src/Weikio.PluginFramework/Context/PluginAssemblyLoadContext.cs @@ -146,7 +146,7 @@ private void Log(LogLevel logLevel, string message, Exception ex = null, params { var logger = GetLogger(); - logger.Log(logLevel, message, ex, args); + logger.Log(logLevel, ex, message, args); } private static string loggerLock = "lock"; diff --git a/src/Weikio.PluginFramework/Weikio.PluginFramework.csproj b/src/Weikio.PluginFramework/Weikio.PluginFramework.csproj index fb83542..408b858 100644 --- a/src/Weikio.PluginFramework/Weikio.PluginFramework.csproj +++ b/src/Weikio.PluginFramework/Weikio.PluginFramework.csproj @@ -19,7 +19,7 @@ - + diff --git a/tests/integration/Weikio.PluginFramework.AspNetCore.IntegrationTests/DefaultPluginTypeTests.cs b/tests/integration/Weikio.PluginFramework.AspNetCore.IntegrationTests/DefaultPluginTypeTests.cs index bc6cf0c..5879955 100644 --- a/tests/integration/Weikio.PluginFramework.AspNetCore.IntegrationTests/DefaultPluginTypeTests.cs +++ b/tests/integration/Weikio.PluginFramework.AspNetCore.IntegrationTests/DefaultPluginTypeTests.cs @@ -12,7 +12,6 @@ namespace Weikio.PluginFramework.AspNetCore.IntegrationTests { public class DefaultPluginTypeTests : TestBase { - public DefaultPluginTypeTests(WebApplicationFactory factory, ITestOutputHelper output) : base(factory, output) { }