diff --git a/Solid.Bootstrapping.Specs/Solid.Bootstrapping.Specs.csproj b/Solid.Bootstrapping.Specs/Solid.Bootstrapping.Specs.csproj index 9d8c297e..fa046d87 100644 --- a/Solid.Bootstrapping.Specs/Solid.Bootstrapping.Specs.csproj +++ b/Solid.Bootstrapping.Specs/Solid.Bootstrapping.Specs.csproj @@ -4,12 +4,12 @@ false - + - + diff --git a/Solid.Bootstrapping/Middleware.cs b/Solid.Bootstrapping/Middleware.cs index 0785940d..8c7148e1 100644 --- a/Solid.Bootstrapping/Middleware.cs +++ b/Solid.Bootstrapping/Middleware.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using Solid.IoC.Registration; using Solid.Practices.Composition.Contracts; using Solid.Practices.IoC; using Solid.Practices.Middleware; @@ -179,7 +180,7 @@ public TBootstrapper Apply( /// specified dependency registrator middleware. /// /// The type of the bootstrapper. - /// + /// public class UseDependencyRegistratorMiddleware : IMiddleware where TBootstrapper : class, IHaveRegistrator { @@ -202,4 +203,21 @@ public TBootstrapper Apply( return @object; } } + + /// + /// Adds support for default registration method for . + /// The default lifetime is singleton. + /// + /// + public class UseDefaultRegistrationMethodMiddleware : IMiddleware + where TBootstrapper : class, IHaveRegistrator + { + /// + public TBootstrapper Apply(TBootstrapper @object) + { + RegistrationMethodContext.SetDefaultRegistrationMethod((dr, match) => + dr.AddSingleton(match.ServiceType, match.ImplementationType)); + return @object; + } + } } diff --git a/Solid.Bootstrapping/Solid.Bootstrapping.csproj b/Solid.Bootstrapping/Solid.Bootstrapping.csproj index de0d2b5b..b879d025 100644 --- a/Solid.Bootstrapping/Solid.Bootstrapping.csproj +++ b/Solid.Bootstrapping/Solid.Bootstrapping.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release @@ -12,6 +12,7 @@ + diff --git a/Solid.Common.Platform/net/Solid.Common.NET.csproj b/Solid.Common.Platform/net/Solid.Common.NET.csproj index 6de5c5d5..b5318b56 100644 --- a/Solid.Common.Platform/net/Solid.Common.NET.csproj +++ b/Solid.Common.Platform/net/Solid.Common.NET.csproj @@ -2,7 +2,7 @@ net5.0 false - 2.3.1 + 2.3.2 Solid.Common.Platform Solid.Common diff --git a/Solid.Common.Platform/netcore/Solid.Common.NETCore.csproj b/Solid.Common.Platform/netcore/Solid.Common.NETCore.csproj index 65fbab35..ba182099 100644 --- a/Solid.Common.Platform/netcore/Solid.Common.NETCore.csproj +++ b/Solid.Common.Platform/netcore/Solid.Common.NETCore.csproj @@ -2,7 +2,7 @@ netcoreapp3.1 false - 2.3.1 + 2.3.2 Solid.Common.Platform Solid.Common diff --git a/Solid.Common.Platform/netframework/Properties/AssemblyInfo.cs b/Solid.Common.Platform/netframework/Properties/AssemblyInfo.cs index b74f2327..d458c390 100644 --- a/Solid.Common.Platform/netframework/Properties/AssemblyInfo.cs +++ b/Solid.Common.Platform/netframework/Properties/AssemblyInfo.cs @@ -28,5 +28,5 @@ // Build Number // Revision // -[assembly: AssemblyVersion("2.3.1")] -[assembly: AssemblyFileVersion("2.3.1")] +[assembly: AssemblyVersion("2.3.2")] +[assembly: AssemblyFileVersion("2.3.2")] diff --git a/Solid.Common.Platform/uwp/Properties/AssemblyInfo.cs b/Solid.Common.Platform/uwp/Properties/AssemblyInfo.cs index f93666c9..3599439c 100644 --- a/Solid.Common.Platform/uwp/Properties/AssemblyInfo.cs +++ b/Solid.Common.Platform/uwp/Properties/AssemblyInfo.cs @@ -20,6 +20,6 @@ // Build Number // Revision // -[assembly: AssemblyVersion("2.3.1")] -[assembly: AssemblyFileVersion("2.3.1")] +[assembly: AssemblyVersion("2.3.2")] +[assembly: AssemblyFileVersion("2.3.2")] [assembly: ComVisible(false)] diff --git a/Solid.Common/Solid.Common.csproj b/Solid.Common/Solid.Common.csproj index e2acb759..81d9fbb4 100644 --- a/Solid.Common/Solid.Common.csproj +++ b/Solid.Common/Solid.Common.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Core.Tests/Solid.Core.Tests.csproj b/Solid.Core.Tests/Solid.Core.Tests.csproj index 90244da1..f5026da7 100644 --- a/Solid.Core.Tests/Solid.Core.Tests.csproj +++ b/Solid.Core.Tests/Solid.Core.Tests.csproj @@ -5,7 +5,7 @@ false - + diff --git a/Solid.Core/Solid.Core.csproj b/Solid.Core/Solid.Core.csproj index a5643b75..f9bcd17f 100644 --- a/Solid.Core/Solid.Core.csproj +++ b/Solid.Core/Solid.Core.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Extensibility.Specs/Solid.Extensibility.Specs.csproj b/Solid.Extensibility.Specs/Solid.Extensibility.Specs.csproj index 65171836..797c19d4 100644 --- a/Solid.Extensibility.Specs/Solid.Extensibility.Specs.csproj +++ b/Solid.Extensibility.Specs/Solid.Extensibility.Specs.csproj @@ -1,16 +1,16 @@ - + net5.0 false false - + - + @@ -23,28 +23,10 @@ - - - - True - - - True - - + Always - - - - SpecFlowSingleFileGenerator - Middleware Types.feature.cs - - - SpecFlowSingleFileGenerator - Using extensibility by type as Aspect.feature.cs - - + \ No newline at end of file diff --git a/Solid.Extensibility/Solid.Extensibility.csproj b/Solid.Extensibility/Solid.Extensibility.csproj index 498db44d..318097f8 100644 --- a/Solid.Extensibility/Solid.Extensibility.csproj +++ b/Solid.Extensibility/Solid.Extensibility.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.IoC.Adapters.BoDi.Specs/Solid - Backup.IoC.Adapters.BoDi.Specs.csproj b/Solid.IoC.Adapters.BoDi.Specs/Solid - Backup.IoC.Adapters.BoDi.Specs.csproj deleted file mode 100644 index 4ccb1c1e..00000000 --- a/Solid.IoC.Adapters.BoDi.Specs/Solid - Backup.IoC.Adapters.BoDi.Specs.csproj +++ /dev/null @@ -1,30 +0,0 @@ - - - net5.0 - false - false - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers - - - - - - - - - Always - - - \ No newline at end of file diff --git a/Solid.IoC.Adapters.BoDi.Specs/Solid.IoC.Adapters.BoDi.Specs.csproj b/Solid.IoC.Adapters.BoDi.Specs/Solid.IoC.Adapters.BoDi.Specs.csproj index 4ccb1c1e..441950ba 100644 --- a/Solid.IoC.Adapters.BoDi.Specs/Solid.IoC.Adapters.BoDi.Specs.csproj +++ b/Solid.IoC.Adapters.BoDi.Specs/Solid.IoC.Adapters.BoDi.Specs.csproj @@ -1,15 +1,15 @@ - + net5.0 false false - + - + diff --git a/Solid.IoC.Adapters.BoDi/Solid.IoC.Adapters.BoDi.csproj b/Solid.IoC.Adapters.BoDi/Solid.IoC.Adapters.BoDi.csproj index c3003112..81766926 100644 --- a/Solid.IoC.Adapters.BoDi/Solid.IoC.Adapters.BoDi.csproj +++ b/Solid.IoC.Adapters.BoDi/Solid.IoC.Adapters.BoDi.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.IoC.Registration.Specs.Tests.Contracts/IDependency.cs b/Solid.IoC.Registration.Specs.Tests.Contracts/IDependency.cs new file mode 100644 index 00000000..67c1f273 --- /dev/null +++ b/Solid.IoC.Registration.Specs.Tests.Contracts/IDependency.cs @@ -0,0 +1,7 @@ +namespace Solid.IoC.Registration.Specs.Tests.Contracts +{ + public interface IDependency + { + + } +} \ No newline at end of file diff --git a/Solid.IoC.Registration.Specs.Tests.Contracts/ObjectBase.cs b/Solid.IoC.Registration.Specs.Tests.Contracts/ObjectBase.cs new file mode 100644 index 00000000..22540d42 --- /dev/null +++ b/Solid.IoC.Registration.Specs.Tests.Contracts/ObjectBase.cs @@ -0,0 +1,7 @@ +namespace Solid.IoC.Registration.Specs.Tests.Contracts +{ + public abstract class ObjectBase + { + + } +} \ No newline at end of file diff --git a/Solid.IoC.Registration.Specs.Tests.Implementations/Dependency.cs b/Solid.IoC.Registration.Specs.Tests.Implementations/Dependency.cs new file mode 100644 index 00000000..994691b9 --- /dev/null +++ b/Solid.IoC.Registration.Specs.Tests.Implementations/Dependency.cs @@ -0,0 +1,9 @@ +using Solid.IoC.Registration.Specs.Tests.Contracts; + +namespace Solid.IoC.Registration.Specs.Tests.Implementations +{ + public class Dependency : IDependency + { + + } +} \ No newline at end of file diff --git a/Solid.IoC.Registration.Specs/Automagical Registration.feature b/Solid.IoC.Registration.Specs/Automagical Registration.feature index 79dcc1d3..613950bd 100644 --- a/Solid.IoC.Registration.Specs/Automagical Registration.feature +++ b/Solid.IoC.Registration.Specs/Automagical Registration.feature @@ -1,22 +1,45 @@ -Feature: Automagical Registration +@cleanRegistrationMethodContext +Feature: Automagical Registration In order to simplify IoC implementation in my apps As an app developer I want to be able to register dependencies automagically -Scenario: Registering dependencies automagically by ending should allow successful resolution +Scenario Outline: Registering dependencies automagically by ending should allow successful resolution Given There are valid implementations for all declared dependencies - When I use object container + When I use '' When I use registration by ending - Then All dependencies can be resolved successfully + Then All dependencies by ending can be resolved successfully +Examples: + | container name | + | specflow object container | + | microsoft di container | -Scenario: Registering dependencies automagically by contract which is an interface should allow successful resolution +Scenario Outline: Registering dependencies automagically by contract which is an interface should allow successful resolution Given There are valid implementations for all declared dependencies - When I use object container + When I use '' When I use registration by contract which is an interface - Then All dependencies can be resolved successfully + Then All dependencies by contract which is an interface can be resolved successfully +Examples: + | container name | + | specflow object container | + | microsoft di container | -Scenario: Registering dependencies automagically by contract which is a class should allow successful resolution +Scenario Outline: Registering dependencies automagically by contract which is a class should allow successful resolution Given There are valid implementations for all declared dependencies - When I use object container + When I use '' When I use registration by contract which is a class - Then All dependencies can be resolved successfully \ No newline at end of file + Then All dependencies by contract which is a class can be resolved successfully +Examples: + | container name | + | specflow object container | + | microsoft di container | + +Scenario Outline: Registering all dependencies automagically with implicit default registration method should allow successful resolution for all dependencies + Given There are valid implementations for all declared dependencies + When I use '' with default registration method + When I use automagical registration + Then All dependencies can be resolved successfully +Examples: + | container name | + | specflow object container | + | microsoft di container | \ No newline at end of file diff --git a/Solid.IoC.Registration.Specs/AutomagicalRegistrationScenarioDataStore.cs b/Solid.IoC.Registration.Specs/AutomagicalRegistrationScenarioDataStore.cs index 612f4723..0cc8b811 100644 --- a/Solid.IoC.Registration.Specs/AutomagicalRegistrationScenarioDataStore.cs +++ b/Solid.IoC.Registration.Specs/AutomagicalRegistrationScenarioDataStore.cs @@ -1,5 +1,6 @@ using System.Reflection; using Attest.Testing.SpecFlow; +using Microsoft.Extensions.DependencyInjection; using Solid.Practices.IoC; using TechTalk.SpecFlow; @@ -17,10 +18,34 @@ public Assembly[] Assemblies set => SetValue(value); } + public Assembly ContractsAssembly + { + get => GetValue(); + set => SetValue(value); + } + + public Assembly ImplementationsAssembly + { + get => GetValue(); + set => SetValue(value); + } + public IIocContainer IocContainer { get => GetValue(); set => SetValue(value); } + + public IServiceCollection DiContainer + { + get => GetValue(); + set => SetValue(value); + } + + public string ContainerName + { + get => GetValue(); + set => SetValue(value); + } } } diff --git a/Solid.IoC.Registration.Specs/AutomagicalRegistrationSteps.cs b/Solid.IoC.Registration.Specs/AutomagicalRegistrationSteps.cs index 1948141e..921861db 100644 --- a/Solid.IoC.Registration.Specs/AutomagicalRegistrationSteps.cs +++ b/Solid.IoC.Registration.Specs/AutomagicalRegistrationSteps.cs @@ -1,10 +1,11 @@ -using System.Linq; -using System.Reflection; +using System.Reflection; using BoDi; using FluentAssertions; +using Microsoft.Extensions.DependencyInjection; using Solid.IoC.Adapters.BoDi; using Solid.IoC.Registration.Specs.Tests.Contracts; using Solid.IoC.Registration.Specs.Tests.Implementations; +using Solid.Practices.IoC; using TechTalk.SpecFlow; namespace Solid.IoC.Registration.Specs @@ -12,7 +13,6 @@ namespace Solid.IoC.Registration.Specs [Binding] internal class AutomagicalRegistrationSteps { - private string[] _assembliesNames; private readonly AutomagicalRegistrationScenarioDataStore _scenarioDataStore; public AutomagicalRegistrationSteps(ScenarioContext scenarioContext) @@ -23,49 +23,171 @@ public AutomagicalRegistrationSteps(ScenarioContext scenarioContext) [Given(@"There are valid implementations for all declared dependencies")] public void GivenThereAreValidImplementationsForAllDeclaredDependencies() { - _assembliesNames = new[] + var contractsAssemblyName = "Solid.IoC.Registration.Specs.Tests.Contracts.dll"; + var implementationsAssemblyName = "Solid.IoC.Registration.Specs.Tests.Implementations.dll"; + var contractsAssembly = Assembly.LoadFrom(contractsAssemblyName); + var implementationsAssembly = Assembly.LoadFrom(implementationsAssemblyName); + _scenarioDataStore.ContractsAssembly = contractsAssembly; + _scenarioDataStore.ImplementationsAssembly = implementationsAssembly; + _scenarioDataStore.Assemblies = new[] {contractsAssembly, implementationsAssembly}; + } + + [When(@"I use '(.*)'")] + public void WhenIUse(string containerName) + { + _scenarioDataStore.ContainerName = containerName; + switch (containerName) { - "Solid.IoC.Registration.Specs.Tests.Contracts.dll", - "Solid.IoC.Registration.Specs.Tests.Implementations.dll" - }; - _scenarioDataStore.Assemblies = _assembliesNames.Select(Assembly.LoadFrom).ToArray(); + case Consts.SpecFlowObjectContainerName: + _scenarioDataStore.IocContainer = new ObjectContainerAdapter(new ObjectContainer()); + break; + case Consts.MicrosoftDiContainerName: + _scenarioDataStore.DiContainer = new ServiceCollection(); + break; + } } - [When(@"I use object container")] - public void WhenIUseObjectContainer() + [When(@"I use '(.*)' with default registration method")] + public void WhenIUseWithDefaultRegistrationMethod(string containerName) { - _scenarioDataStore.IocContainer = new ObjectContainerAdapter(new ObjectContainer()); + _scenarioDataStore.ContainerName = containerName; + switch (containerName) + { + case Consts.SpecFlowObjectContainerName: + _scenarioDataStore.IocContainer = new ObjectContainerAdapter(new ObjectContainer()); + RegistrationMethodContext.SetDefaultRegistrationMethod((dr, match) => + dr.RegisterSingleton(match.ServiceType, match.ImplementationType)); + break; + case Consts.MicrosoftDiContainerName: + _scenarioDataStore.DiContainer = new ServiceCollection(); + RegistrationMethodContext.SetDefaultRegistrationMethod((dr, match) => + dr.AddSingleton(match.ServiceType, match.ImplementationType)); + break; + } } [When(@"I use registration by ending")] public void WhenIUseRegistrationByEnding() { - _scenarioDataStore.IocContainer.RegisterImplementationsAsContracts(_scenarioDataStore.Assemblies, - a => a.FindTypesByEnding("ScenarioDataStore"), - (dr, match) => dr.RegisterSingleton(match.ServiceType, match.ImplementationType)); + switch (_scenarioDataStore.ContainerName) + { + case Consts.SpecFlowObjectContainerName: + _scenarioDataStore.IocContainer.RegisterImplementationsAsContracts(_scenarioDataStore.Assemblies, + a => a.FindTypesByEnding("ScenarioDataStore"), + (dr, match) => dr.RegisterSingleton(match.ServiceType, match.ImplementationType)); + break; + case Consts.MicrosoftDiContainerName: + _scenarioDataStore.DiContainer.RegisterImplementationsAsContracts(_scenarioDataStore.Assemblies, + a => a.FindTypesByEnding("ScenarioDataStore"), + (dr, match) => dr.AddSingleton(match.ServiceType, match.ImplementationType)); + break; + } } [When(@"I use registration by contract which is an interface")] public void WhenIUseRegistrationByContractWhichIsAnInterface() { - _scenarioDataStore.IocContainer.RegisterImplementationsAsContracts(_scenarioDataStore.Assemblies, - a => a.FindTypesByContract(typeof(IScenarioDataStore)), - (dr, match) => dr.RegisterSingleton(match.ServiceType, match.ImplementationType)); + switch (_scenarioDataStore.ContainerName) + { + case Consts.SpecFlowObjectContainerName: + _scenarioDataStore.IocContainer.RegisterImplementationsAsContracts(_scenarioDataStore.Assemblies, + a => a.FindTypesByContract(typeof(IScenarioDataStore)), + (dr, match) => dr.RegisterSingleton(match.ServiceType, match.ImplementationType)); + break; + case Consts.MicrosoftDiContainerName: + _scenarioDataStore.DiContainer.RegisterImplementationsAsContracts(_scenarioDataStore.Assemblies, + a => a.FindTypesByContract(typeof(IScenarioDataStore)), + (dr, match) => dr.AddSingleton(match.ServiceType, match.ImplementationType)); + break; + } } [When(@"I use registration by contract which is a class")] public void WhenIUseRegistrationByContractWhichIsAClass() { - _scenarioDataStore.IocContainer.RegisterImplementationsAsContracts(_scenarioDataStore.Assemblies, - a => a.FindTypesByContract(typeof(ObjectBase)), - (dr, match) => dr.RegisterSingleton(match.ServiceType, match.ImplementationType)); + switch (_scenarioDataStore.ContainerName) + { + case Consts.SpecFlowObjectContainerName: + _scenarioDataStore.IocContainer.RegisterImplementations(_scenarioDataStore.Assemblies, + a => a.FindTypesByContract(typeof(ObjectBase)), + (dr, match) => dr.RegisterSingleton(match, match)); + break; + case Consts.MicrosoftDiContainerName: + _scenarioDataStore.DiContainer.RegisterImplementations(_scenarioDataStore.Assemblies, + a => a.FindTypesByContract(typeof(ObjectBase)), + (dr, match) => dr.AddSingleton(match)); + break; + } + } + + [When(@"I use automagical registration")] + public void WhenIUseAutomagicalRegistration() + { + switch (_scenarioDataStore.ContainerName) + { + case Consts.SpecFlowObjectContainerName: + _scenarioDataStore.IocContainer.RegisterAutomagically(_scenarioDataStore.ContractsAssembly, + _scenarioDataStore.ImplementationsAssembly); + break; + case Consts.MicrosoftDiContainerName: + _scenarioDataStore.DiContainer.RegisterAutomagically(_scenarioDataStore.ContractsAssembly, + _scenarioDataStore.ImplementationsAssembly); + break; + } + } + + [Then(@"All dependencies by ending can be resolved successfully")] + public void ThenAllDependenciesByEndingCanBeResolvedSuccessfully() + { + ScenarioDataStoreShouldBeResolvedSuccessfullyByInterface(); + } + + [Then(@"All dependencies by contract which is an interface can be resolved successfully")] + public void ThenAllDependenciesByContractWhichIsAnInterfaceCanBeResolvedSuccessfully() + { + ScenarioDataStoreShouldBeResolvedSuccessfullyByInterface(); + } + + [Then(@"All dependencies by contract which is a class can be resolved successfully")] + public void ThenAllDependenciesByContractWhichIsAClassCanBeResolvedSuccessfully() + { + ScenarioDataStoreShouldBeResolvedSuccessfullyByClass(); } [Then(@"All dependencies can be resolved successfully")] public void ThenAllDependenciesCanBeResolvedSuccessfully() { - var scenarioDataStore = _scenarioDataStore.IocContainer.Resolve(typeof(IScenarioDataStore)); + ScenarioDataStoreShouldBeResolvedSuccessfullyByInterface(); + var dependency = ResolveDependency(); + dependency.Should().BeOfType(); + } + + private void ScenarioDataStoreShouldBeResolvedSuccessfullyByInterface() + { + var scenarioDataStore = ResolveDependency(); + scenarioDataStore.Should().BeOfType(); + } + + private void ScenarioDataStoreShouldBeResolvedSuccessfullyByClass() + { + var scenarioDataStore = ResolveDependency(); scenarioDataStore.Should().BeOfType(); } + + private TDependency ResolveDependency() where TDependency : class + { + TDependency dependency = default; + switch (_scenarioDataStore.ContainerName) + { + case Consts.SpecFlowObjectContainerName: + dependency = _scenarioDataStore.IocContainer.Resolve(); + break; + case Consts.MicrosoftDiContainerName: + dependency = _scenarioDataStore.DiContainer.BuildServiceProvider().GetService(); + break; + } + + return dependency; + } } } \ No newline at end of file diff --git a/Solid.IoC.Registration.Specs/CleanRegistrationMethodContextHook.cs b/Solid.IoC.Registration.Specs/CleanRegistrationMethodContextHook.cs new file mode 100644 index 00000000..4848d261 --- /dev/null +++ b/Solid.IoC.Registration.Specs/CleanRegistrationMethodContextHook.cs @@ -0,0 +1,14 @@ +using TechTalk.SpecFlow; + +namespace Solid.IoC.Registration.Specs +{ + [Binding] + public sealed class CleanRegistrationMethodContextHook + { + [AfterScenario("cleanRegistrationMethodContext")] + public void AfterScenario() + { + RegistrationMethodContext.ClearRegistrations(); + } + } +} diff --git a/Solid.IoC.Registration.Specs/Consts.cs b/Solid.IoC.Registration.Specs/Consts.cs new file mode 100644 index 00000000..c2a068ff --- /dev/null +++ b/Solid.IoC.Registration.Specs/Consts.cs @@ -0,0 +1,8 @@ +namespace Solid.IoC.Registration.Specs +{ + internal static class Consts + { + internal const string SpecFlowObjectContainerName = "specflow object container"; + internal const string MicrosoftDiContainerName = "microsoft di container"; + } +} diff --git a/Solid.IoC.Registration.Specs/Registration Method Context.feature b/Solid.IoC.Registration.Specs/Registration Method Context.feature new file mode 100644 index 00000000..234bb752 --- /dev/null +++ b/Solid.IoC.Registration.Specs/Registration Method Context.feature @@ -0,0 +1,43 @@ +@cleanRegistrationMethodContext +Feature: Registration Method Context + In order to simplify IoC implementation in my apps + As an app developer + I want to be able to manage default registration method per specific IoC container + +#TODO: Think about running in parallel +Scenario: Setting default registration method for the specific IoC container should be successful + When I use '' with default registration method + Then The default registration method for '' is set + And There are no errors +Examples: + | container name | + | specflow object container | + | microsoft di container | + +Scenario: Getting default registration method for the specific IoC container after setting it should be successful + When I use '' with default registration method + Then The default registration method for '' is set + And There are no errors +Examples: + | container name | + | specflow object container | + | microsoft di container | + +Scenario: Setting default registration method for the specific IoC container more than once should be successful + When I use '' with default registration method + And I set default registration method for '' + Then The default registration method for '' is overridden + And There are no errors +Examples: + | container name | + | specflow object container | + | microsoft di container | + +Scenario Outline: Getting default registration method for the specific IoC container without setting it should result in error + When I use '' + And I get default registration method for '' + Then The correspondent error with details for get default registration method for '' is thrown +Examples: + | container name | + | specflow object container | + | microsoft di container | \ No newline at end of file diff --git a/Solid.IoC.Registration.Specs/RegistrationMethodContextScenarioDataStore.cs b/Solid.IoC.Registration.Specs/RegistrationMethodContextScenarioDataStore.cs new file mode 100644 index 00000000..ae50a29c --- /dev/null +++ b/Solid.IoC.Registration.Specs/RegistrationMethodContextScenarioDataStore.cs @@ -0,0 +1,26 @@ +using System; +using Attest.Testing.SpecFlow; +using TechTalk.SpecFlow; + +namespace Solid.IoC.Registration.Specs +{ + internal sealed class RegistrationMethodContextScenarioDataStore : ScenarioDataStoreBase + { + public RegistrationMethodContextScenarioDataStore(ScenarioContext scenarioContext) + : base(scenarioContext) + { + } + + public Delegate LastDefaultRegistrationMethod + { + get => GetValue(); + set => SetValue(value); + } + + public Exception LastError + { + get => GetValue(); + set => SetValue(value); + } + } +} diff --git a/Solid.IoC.Registration.Specs/RegistrationMethodContextSteps.cs b/Solid.IoC.Registration.Specs/RegistrationMethodContextSteps.cs new file mode 100644 index 00000000..b734d57c --- /dev/null +++ b/Solid.IoC.Registration.Specs/RegistrationMethodContextSteps.cs @@ -0,0 +1,115 @@ +using System; +using FluentAssertions; +using Microsoft.Extensions.DependencyInjection; +using Solid.Practices.IoC; +using TechTalk.SpecFlow; +using Xunit; + +namespace Solid.IoC.Registration.Specs +{ + [Binding] + internal sealed class RegistrationMethodContextSteps + { + private readonly RegistrationMethodContextScenarioDataStore _scenarioDataStore; + + public RegistrationMethodContextSteps(ScenarioContext scenarioContext) + { + _scenarioDataStore = new RegistrationMethodContextScenarioDataStore(scenarioContext); + } + + [When(@"I get default registration method for '(.*)'")] + public void WhenIGetDefaultRegistrationMethodFor(string containerName) + { + Exception error = default; + switch (containerName) + { + case Consts.SpecFlowObjectContainerName: + error = Record.Exception(RegistrationMethodContext.GetDefaultRegistrationMethod); + break; + case Consts.MicrosoftDiContainerName: + error = Record.Exception(RegistrationMethodContext + .GetDefaultRegistrationMethod); + break; + } + _scenarioDataStore.LastError = error; + } + + [When(@"I set default registration method for '(.*)'")] + public void WhenISetDefaultRegistrationMethodFor(string containerName) + { + switch (containerName) + { + case Consts.SpecFlowObjectContainerName: + Action defaultIocContainerRegistrationMethod = (container, match) => { }; + _scenarioDataStore.LastDefaultRegistrationMethod = defaultIocContainerRegistrationMethod; + RegistrationMethodContext.SetDefaultRegistrationMethod(defaultIocContainerRegistrationMethod); + break; + case Consts.MicrosoftDiContainerName: + Action defaultServiceCollectionRegistrationMethod = (container, match) => { }; + _scenarioDataStore.LastDefaultRegistrationMethod = defaultServiceCollectionRegistrationMethod; + RegistrationMethodContext.SetDefaultRegistrationMethod(defaultServiceCollectionRegistrationMethod); + break; + } + } + + [Then(@"The default registration method for '(.*)' is set")] + public void ThenTheDefaultRegistrationMethodForIsSet(string containerName) + { + Delegate defaultRegistrationMethod = default; + switch (containerName) + { + case Consts.SpecFlowObjectContainerName: + defaultRegistrationMethod = RegistrationMethodContext.GetDefaultRegistrationMethod(); + break; + case Consts.MicrosoftDiContainerName: + defaultRegistrationMethod = + RegistrationMethodContext.GetDefaultRegistrationMethod(); + break; + } + + defaultRegistrationMethod.Should().NotBeNull(); + } + + [Then(@"The default registration method for '(.*)' is overridden")] + public void ThenTheDefaultRegistrationMethodForIsOverridden(string containerName) + { + Delegate defaultRegistrationMethod = default; + switch (containerName) + { + case Consts.SpecFlowObjectContainerName: + defaultRegistrationMethod = RegistrationMethodContext.GetDefaultRegistrationMethod(); + break; + case Consts.MicrosoftDiContainerName: + defaultRegistrationMethod = + RegistrationMethodContext.GetDefaultRegistrationMethod(); + break; + } + defaultRegistrationMethod.Should().BeSameAs(_scenarioDataStore.LastDefaultRegistrationMethod); + } + + [Then(@"There are no errors")] + public void ThenThereAreNoErrors() + { + var lastError = _scenarioDataStore.LastError; + lastError.Should().BeNull(); + } + + [Then(@"The correspondent error with details for get default registration method for '(.*)' is thrown")] + public void ThenTheCorrespondentErrorWithDetailsForGetDefaultRegistrationMethodForIsThrown(string containerName) + { + string containerType = default; + switch (containerName) + { + case Consts.SpecFlowObjectContainerName: + containerType = "IIocContainer"; + break; + case Consts.MicrosoftDiContainerName: + containerType = "IServiceCollection"; + break; + } + var lastError = _scenarioDataStore.LastError; + lastError.Should().BeOfType() + .Which.Message.Should().Be($"Missing default registration method for {containerType}"); + } + } +} \ No newline at end of file diff --git a/Solid.IoC.Registration.Specs/Solid.IoC.Registration.Specs.csproj b/Solid.IoC.Registration.Specs/Solid.IoC.Registration.Specs.csproj index 89fe0ba2..7135741e 100644 --- a/Solid.IoC.Registration.Specs/Solid.IoC.Registration.Specs.csproj +++ b/Solid.IoC.Registration.Specs/Solid.IoC.Registration.Specs.csproj @@ -1,34 +1,33 @@ - net5.0 false false - - + + - + - - + - Always - - - + + Always + + + \ No newline at end of file diff --git a/Solid.IoC.Registration.Specs/xunit.runner.json b/Solid.IoC.Registration.Specs/xunit.runner.json new file mode 100644 index 00000000..f5cdb055 --- /dev/null +++ b/Solid.IoC.Registration.Specs/xunit.runner.json @@ -0,0 +1,3 @@ +{ + "parallelizeTestCollections": false +} diff --git a/Solid.IoC.Registration/DependencyRegistratorExtensions.cs b/Solid.IoC.Registration/DependencyRegistratorExtensions.cs index 8c4c5cb5..cc10caa9 100644 --- a/Solid.IoC.Registration/DependencyRegistratorExtensions.cs +++ b/Solid.IoC.Registration/DependencyRegistratorExtensions.cs @@ -11,7 +11,7 @@ namespace Solid.IoC.Registration public static class DependencyRegistratorExtensions { /// - /// Registers matching dependencies in an auto-magical fashion. + /// Registers matching dependencies by their contracts in an auto-magical fashion. /// /// The type of the dependency registrator. /// The dependency registrator. @@ -37,6 +37,32 @@ public static TDependencyRegistrator RegisterImplementationsAsContracts + /// Registers matching dependencies as themselves in an auto-magical fashion. + /// + /// The type of the dependency registrator. + /// The dependency registrator. + /// The list of assemblies to be inspected for dependency matches. + /// The strategy for extracting types from the list of assemblies. + /// The way of registering matching dependencies into the provided registrator. + /// + public static TDependencyRegistrator RegisterImplementations( + this TDependencyRegistrator dependencyRegistrator, + IEnumerable assemblies, + Func, Type[]> typeExtractionMethod, + Action registrationMethod) + { + var assembliesArray = assemblies as Assembly[] ?? assemblies.ToArray(); + var matches = typeExtractionMethod(assembliesArray).Where(t => t.IsClass); + + foreach (var match in matches) + { + registrationMethod(dependencyRegistrator, match); + } + + return dependencyRegistrator; + } + private static TypeMatch BuildMatch(Type implementationCandidate) { var match = FindContractMatch(implementationCandidate); @@ -53,5 +79,45 @@ private static Type FindContractMatch(Type implementationCandidate) .GetImplementedInterfaces() .FirstOrDefault(t => t.Name == contractName); } + + /// + /// Registers types as their abstractions using provided registration method + /// The assemblies are inspected using [IDependency]--[Dependency] naming convention + /// + /// The dependency registrator. + /// The assembly which contains the contracts/abstractions. + /// The assembly which contains the implementations. + /// The registration method. + /// + public static TDependencyRegistrator RegisterAutomagically( + this TDependencyRegistrator dependencyRegistrator, + Assembly contractsAssembly, + Assembly implementationsAssembly, + Action registrationMethod = null) + { + registrationMethod = registrationMethod ?? RegistrationMethodContext.GetDefaultRegistrationMethod(); + var contracts = contractsAssembly.DefinedTypes + .Where(t => t.IsInterface) + .Select(t => t.AsType()) + .ToArray(); + var implementations = + implementationsAssembly.DefinedTypes + .Where(t => t.IsInterface == false) + .ToArray(); + var contractsInfo = contracts.ToDictionary(t => t.Name, t => t); + var implementationsInfo = implementations + .Where(t => t.Name.StartsWith("<>") == false) + .ToDictionary(t => t.Name, t => t); + foreach (var implementationInfo in implementationsInfo) + { + contractsInfo.TryGetValue("I" + implementationInfo.Key, out Type match); + if (match != null) + { + registrationMethod.Invoke(dependencyRegistrator, + new TypeMatch(match, implementationInfo.Value.AsType())); + } + } + return dependencyRegistrator; + } } } diff --git a/Solid.IoC.Registration/MissingDefaultRegistrationMethodException.cs b/Solid.IoC.Registration/MissingDefaultRegistrationMethodException.cs new file mode 100644 index 00000000..acd1620a --- /dev/null +++ b/Solid.IoC.Registration/MissingDefaultRegistrationMethodException.cs @@ -0,0 +1,20 @@ +using System; + +namespace Solid.IoC.Registration +{ + /// + /// Represents an exception that is thrown when no default registration method is found. + /// + public sealed class MissingDefaultRegistrationMethodException : Exception + { + /// + /// Creates a new instance of + /// + /// The dependency registrator type. + public MissingDefaultRegistrationMethodException(Type dependencyRegistratorType) + :base($"Missing default registration method for {dependencyRegistratorType.Name}") + { + + } + } +} diff --git a/Solid.IoC.Registration/RegistrationMethodContext.cs b/Solid.IoC.Registration/RegistrationMethodContext.cs new file mode 100644 index 00000000..f02837a3 --- /dev/null +++ b/Solid.IoC.Registration/RegistrationMethodContext.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; + +namespace Solid.IoC.Registration +{ + /// + /// Represents container for default registration methods. + /// + public static class RegistrationMethodContext + { + private static readonly Dictionary Storage = + new Dictionary(); + + /// + /// Gets default registration method for the provided dependency registrator type. + /// + /// The dependency registrator type. + /// + public static Action GetDefaultRegistrationMethod() + { + var key = typeof(TDependencyRegistrator); + if (!Storage.ContainsKey(key)) + { + throw new MissingDefaultRegistrationMethodException(key); + } + else + { + return Storage[key] as Action; + } + } + + /// + /// Sets default registration method for the provided dependency registrator type. + /// + /// The dependency registrator type. + /// The default registration method. + public static void SetDefaultRegistrationMethod(Action registrationMethod) + { + var key = typeof(TDependencyRegistrator); + if (!Storage.ContainsKey(key)) + { + Storage.Add(key, registrationMethod); + } + else + { + Storage[key] = registrationMethod; + } + } + + /// + /// Clears all existing default registration methods. + /// + public static void ClearRegistrations() + { + Storage.Clear(); + } + } +} diff --git a/Solid.IoC.Registration/Solid.IoC.Registration.csproj b/Solid.IoC.Registration/Solid.IoC.Registration.csproj index 5950ae6f..0dd1568d 100644 --- a/Solid.IoC.Registration/Solid.IoC.Registration.csproj +++ b/Solid.IoC.Registration/Solid.IoC.Registration.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Ioc.Registration.Specs.Tests.Contracts/IScenarioDataStore.cs b/Solid.Ioc.Registration.Specs.Tests.Contracts/IScenarioDataStore.cs index 3fbd4ee3..dd45e13e 100644 --- a/Solid.Ioc.Registration.Specs.Tests.Contracts/IScenarioDataStore.cs +++ b/Solid.Ioc.Registration.Specs.Tests.Contracts/IScenarioDataStore.cs @@ -3,9 +3,4 @@ public interface IScenarioDataStore { } - - public abstract class ObjectBase - { - - } } diff --git a/Solid.Ioc.Registration.Specs.Tests.Contracts/Solid.IoC.Registration.Specs.Tests.Contracts.csproj b/Solid.Ioc.Registration.Specs.Tests.Contracts/Solid.IoC.Registration.Specs.Tests.Contracts.csproj new file mode 100644 index 00000000..dbe3f17c --- /dev/null +++ b/Solid.Ioc.Registration.Specs.Tests.Contracts/Solid.IoC.Registration.Specs.Tests.Contracts.csproj @@ -0,0 +1,5 @@ + + + netcoreapp3.1 + + \ No newline at end of file diff --git a/Solid.Ioc.Registration.Specs.Tests.Contracts/Solid.Ioc.Registration.Specs.Tests.Contracts.csproj b/Solid.Ioc.Registration.Specs.Tests.Contracts/Solid.Ioc.Registration.Specs.Tests.Contracts.csproj index cb631906..dbe3f17c 100644 --- a/Solid.Ioc.Registration.Specs.Tests.Contracts/Solid.Ioc.Registration.Specs.Tests.Contracts.csproj +++ b/Solid.Ioc.Registration.Specs.Tests.Contracts/Solid.Ioc.Registration.Specs.Tests.Contracts.csproj @@ -1,7 +1,5 @@ - netcoreapp3.1 - - + \ No newline at end of file diff --git a/Solid.Ioc.Registration.Specs.Tests.Implementations/Solid.Ioc.Registration.Specs.Tests.Implementations.csproj b/Solid.Ioc.Registration.Specs.Tests.Implementations/Solid.Ioc.Registration.Specs.Tests.Implementations.csproj index 52b25a67..ab4bfb09 100644 --- a/Solid.Ioc.Registration.Specs.Tests.Implementations/Solid.Ioc.Registration.Specs.Tests.Implementations.csproj +++ b/Solid.Ioc.Registration.Specs.Tests.Implementations/Solid.Ioc.Registration.Specs.Tests.Implementations.csproj @@ -1,11 +1,8 @@ - - + netcoreapp3.1 - - - + \ No newline at end of file diff --git a/Solid.Patterns.Builder/Solid.Patterns.Builder.csproj b/Solid.Patterns.Builder/Solid.Patterns.Builder.csproj index 937b21bf..66961b7e 100644 --- a/Solid.Patterns.Builder/Solid.Patterns.Builder.csproj +++ b/Solid.Patterns.Builder/Solid.Patterns.Builder.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Patterns.ChainOfResponsibility/Solid.Patterns.ChainOfResponsibility.csproj b/Solid.Patterns.ChainOfResponsibility/Solid.Patterns.ChainOfResponsibility.csproj index 645829ae..6565f627 100644 --- a/Solid.Patterns.ChainOfResponsibility/Solid.Patterns.ChainOfResponsibility.csproj +++ b/Solid.Patterns.ChainOfResponsibility/Solid.Patterns.ChainOfResponsibility.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Patterns.Memento/Solid.Patterns.Memento.csproj b/Solid.Patterns.Memento/Solid.Patterns.Memento.csproj index 8c9bef99..94bf1306 100644 --- a/Solid.Patterns.Memento/Solid.Patterns.Memento.csproj +++ b/Solid.Patterns.Memento/Solid.Patterns.Memento.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Patterns.Visitor/Solid.Patterns.Visitor.csproj b/Solid.Patterns.Visitor/Solid.Patterns.Visitor.csproj index 20370caa..02f9feb9 100644 --- a/Solid.Patterns.Visitor/Solid.Patterns.Visitor.csproj +++ b/Solid.Patterns.Visitor/Solid.Patterns.Visitor.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Practices.Composition.Client/Solid.Practices.Composition.Client.csproj b/Solid.Practices.Composition.Client/Solid.Practices.Composition.Client.csproj index e52a3e16..8853e31c 100644 --- a/Solid.Practices.Composition.Client/Solid.Practices.Composition.Client.csproj +++ b/Solid.Practices.Composition.Client/Solid.Practices.Composition.Client.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Practices.Composition.Container.Specs/Solid.Practices.Composition.Container.Specs.csproj b/Solid.Practices.Composition.Container.Specs/Solid.Practices.Composition.Container.Specs.csproj index 01a9b00e..86b58f18 100644 --- a/Solid.Practices.Composition.Container.Specs/Solid.Practices.Composition.Container.Specs.csproj +++ b/Solid.Practices.Composition.Container.Specs/Solid.Practices.Composition.Container.Specs.csproj @@ -4,20 +4,14 @@ net5.0 - - 7.1.0 - - - 6.0.0 - + + - + - - 2.4.1 - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Solid.Practices.Composition.Container/Solid.Practices.Composition.Container.csproj b/Solid.Practices.Composition.Container/Solid.Practices.Composition.Container.csproj index 3f450d97..cf4a6142 100644 --- a/Solid.Practices.Composition.Container/Solid.Practices.Composition.Container.csproj +++ b/Solid.Practices.Composition.Container/Solid.Practices.Composition.Container.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Practices.Composition.Contracts/Solid.Practices.Composition.Contracts.csproj b/Solid.Practices.Composition.Contracts/Solid.Practices.Composition.Contracts.csproj index 56a6c3fa..c5d174b8 100644 --- a/Solid.Practices.Composition.Contracts/Solid.Practices.Composition.Contracts.csproj +++ b/Solid.Practices.Composition.Contracts/Solid.Practices.Composition.Contracts.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Practices.Composition.IntegrationTests.App/Assembly Source Provider.feature b/Solid.Practices.Composition.IntegrationTests.App/Assembly Source Provider.feature index 71084b0f..6e10c0e0 100644 --- a/Solid.Practices.Composition.IntegrationTests.App/Assembly Source Provider.feature +++ b/Solid.Practices.Composition.IntegrationTests.App/Assembly Source Provider.feature @@ -9,8 +9,6 @@ Scenario: Load assemblies using default assembly loading strategy should create When The assemblies provider loads the assemblies in the current folder Then The loaded implementation type implements the loaded contract type -@Ignore -#This test fails on purpose to demonstrate dynamic loading issue thus it's ignored for now Scenario: Load assemblies using custom assembly loading strategy should create matching types Given I run in .NETStandard environment And The assemblies loader used custom assembly loading strategy diff --git a/Solid.Practices.Composition.IntegrationTests.App/Solid.Practices.Composition.IntegrationTests.App.csproj b/Solid.Practices.Composition.IntegrationTests.App/Solid.Practices.Composition.IntegrationTests.App.csproj index a7eda6dc..7171e2a0 100644 --- a/Solid.Practices.Composition.IntegrationTests.App/Solid.Practices.Composition.IntegrationTests.App.csproj +++ b/Solid.Practices.Composition.IntegrationTests.App/Solid.Practices.Composition.IntegrationTests.App.csproj @@ -1,4 +1,4 @@ - + false net5.0 @@ -11,11 +11,11 @@ ..\tests\bin\composition - - + + - + diff --git a/Solid.Practices.Composition.Platform.UWP.Tests/Properties/AssemblyInfo.cs b/Solid.Practices.Composition.Platform.UWP.Tests/Properties/AssemblyInfo.cs index 3865aa11..46ea9a9e 100644 --- a/Solid.Practices.Composition.Platform.UWP.Tests/Properties/AssemblyInfo.cs +++ b/Solid.Practices.Composition.Platform.UWP.Tests/Properties/AssemblyInfo.cs @@ -20,6 +20,6 @@ // Build Number // Revision // -[assembly: AssemblyVersion("2.3.1")] -[assembly: AssemblyFileVersion("2.3.1")] +[assembly: AssemblyVersion("2.3.2")] +[assembly: AssemblyFileVersion("2.3.2")] [assembly: ComVisible(false)] diff --git a/Solid.Practices.Composition.Specs.Steps.Adapters/Solid.Practices.Composition.Specs.Steps.Adapters.csproj b/Solid.Practices.Composition.Specs.Steps.Adapters/Solid.Practices.Composition.Specs.Steps.Adapters.csproj index 93c7a900..da2bd428 100644 --- a/Solid.Practices.Composition.Specs.Steps.Adapters/Solid.Practices.Composition.Specs.Steps.Adapters.csproj +++ b/Solid.Practices.Composition.Specs.Steps.Adapters/Solid.Practices.Composition.Specs.Steps.Adapters.csproj @@ -11,8 +11,8 @@ ..\tests\bin\composition - - + + diff --git a/Solid.Practices.Composition.Specs/Solid.Practices.Composition.Specs.csproj b/Solid.Practices.Composition.Specs/Solid.Practices.Composition.Specs.csproj index 2048ea90..d2e9d8dd 100644 --- a/Solid.Practices.Composition.Specs/Solid.Practices.Composition.Specs.csproj +++ b/Solid.Practices.Composition.Specs/Solid.Practices.Composition.Specs.csproj @@ -5,16 +5,14 @@ - 6.0.0 + 6.1.0 - + - - 2.4.1 - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Solid.Practices.Composition.Web/Solid.Practices.Composition.Web.csproj b/Solid.Practices.Composition.Web/Solid.Practices.Composition.Web.csproj index 96d05417..27f791d3 100644 --- a/Solid.Practices.Composition.Web/Solid.Practices.Composition.Web.csproj +++ b/Solid.Practices.Composition.Web/Solid.Practices.Composition.Web.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release\ diff --git a/Solid.Practices.Composition/Solid.Practices.Composition.csproj b/Solid.Practices.Composition/Solid.Practices.Composition.csproj index 6c510348..39a0a694 100644 --- a/Solid.Practices.Composition/Solid.Practices.Composition.csproj +++ b/Solid.Practices.Composition/Solid.Practices.Composition.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Practices.IoC/DependencyRegistratorExtensions.cs b/Solid.Practices.IoC/DependencyRegistratorExtensions.cs index 24014cbc..a835b767 100644 --- a/Solid.Practices.IoC/DependencyRegistratorExtensions.cs +++ b/Solid.Practices.IoC/DependencyRegistratorExtensions.cs @@ -256,60 +256,6 @@ public static IDependencyRegistrator AddCollection(this IDependencyRegistrator d return dependencyRegistrator; } - /// - /// Registers types as their abstractions using singleton lifetime style - /// The assemblies are inspected using [IDependency]--[Dependency] naming convention - /// - /// The dependency registrator. - /// The assembly which contains the contracts/abstractions - /// The assembly which contains the implementations. - /// - public static IDependencyRegistrator RegisterAutomagically( - this IDependencyRegistrator dependencyRegistrator, - Assembly contractsAssembly, - Assembly implementationsAssembly) - { - return dependencyRegistrator.RegisterAutomagically( - (d, serviceType, implementationType) => d.RegisterSingleton(serviceType, implementationType), - contractsAssembly, - implementationsAssembly); - } - - /// - /// Registers types as their abstractions using provided registration method - /// The assemblies are inspected using [IDependency]--[Dependency] naming convention - /// - /// The dependency registrator. - /// The registration method. - /// The assembly which contains the contracts/abstractions. - /// The assembly which contains the implementations. - /// - public static TDependencyRegistrator RegisterAutomagically( - this TDependencyRegistrator dependencyRegistrator, - Action registrationMethod, - Assembly contractsAssembly, - Assembly implementationsAssembly) - { - var contracts = - contractsAssembly.DefinedTypes.Where(t => t.IsInterface).Select(t => t.AsType()).ToArray(); - var implementations = - implementationsAssembly.DefinedTypes.Where( - t => t.IsInterface == false) - .ToArray(); - var contractsInfo = contracts.ToDictionary(t => t.Name, t => t); - var implementationsInfo = implementations.Where(t => t.Name.StartsWith("<>") == false) - .ToDictionary(t => t.Name, t => t); - foreach (var implementationInfo in implementationsInfo) - { - contractsInfo.TryGetValue("I" + implementationInfo.Key, out Type match); - if (match != null) - { - registrationMethod.Invoke(dependencyRegistrator, match, implementationInfo.Value.AsType()); - } - } - return dependencyRegistrator; - } - /// /// Registers the collection of types that implement the specified contract /// into the dependency registrator. diff --git a/Solid.Practices.IoC/Solid.Practices.IoC.csproj b/Solid.Practices.IoC/Solid.Practices.IoC.csproj index 9c2fe901..dbc6e4a9 100644 --- a/Solid.Practices.IoC/Solid.Practices.IoC.csproj +++ b/Solid.Practices.IoC/Solid.Practices.IoC.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Practices.Middleware.Specs/Solid.Practices.Middleware.Specs.csproj b/Solid.Practices.Middleware.Specs/Solid.Practices.Middleware.Specs.csproj index 88ac5310..85997cf8 100644 --- a/Solid.Practices.Middleware.Specs/Solid.Practices.Middleware.Specs.csproj +++ b/Solid.Practices.Middleware.Specs/Solid.Practices.Middleware.Specs.csproj @@ -5,10 +5,10 @@ false - + - + diff --git a/Solid.Practices.Middleware/Solid.Practices.Middleware.csproj b/Solid.Practices.Middleware/Solid.Practices.Middleware.csproj index 66eaa583..d48a55bb 100644 --- a/Solid.Practices.Middleware/Solid.Practices.Middleware.csproj +++ b/Solid.Practices.Middleware/Solid.Practices.Middleware.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Practices.Modularity/Solid.Practices.Modularity.csproj b/Solid.Practices.Modularity/Solid.Practices.Modularity.csproj index 7e0de97d..b447e0b3 100644 --- a/Solid.Practices.Modularity/Solid.Practices.Modularity.csproj +++ b/Solid.Practices.Modularity/Solid.Practices.Modularity.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release diff --git a/Solid.Practices.Scheduling/Solid.Practices.Scheduling.csproj b/Solid.Practices.Scheduling/Solid.Practices.Scheduling.csproj index 053f055e..df71991a 100644 --- a/Solid.Practices.Scheduling/Solid.Practices.Scheduling.csproj +++ b/Solid.Practices.Scheduling/Solid.Practices.Scheduling.csproj @@ -2,7 +2,7 @@ netstandard2.0 false - 2.3.1 + 2.3.2 ..\Bin\netstandard\Release\ diff --git a/Solid.Tests.Infra/Solid.Tests.Infra.csproj b/Solid.Tests.Infra/Solid.Tests.Infra.csproj index e95c0d29..09b7d8f8 100644 --- a/Solid.Tests.Infra/Solid.Tests.Infra.csproj +++ b/Solid.Tests.Infra/Solid.Tests.Infra.csproj @@ -10,4 +10,4 @@ - + \ No newline at end of file diff --git a/Solid.sln b/Solid.sln index 303cf4fb..40b7f3d0 100644 --- a/Solid.sln +++ b/Solid.sln @@ -113,11 +113,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Registration", "Registratio EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Solid.IoC.Registration", "Solid.IoC.Registration\Solid.IoC.Registration.csproj", "{9AB04FA5-CA09-4CD6-BECA-AEE11ECE00A4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solid.IoC.Registration.Specs", "Solid.IoC.Registration.Specs\Solid.IoC.Registration.Specs.csproj", "{18472BD6-C832-4D4B-BA1B-3ABD58239EE5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Solid.IoC.Registration.Specs", "Solid.IoC.Registration.Specs\Solid.IoC.Registration.Specs.csproj", "{18472BD6-C832-4D4B-BA1B-3ABD58239EE5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solid.IoC.Registration.Specs.Tests.Contracts", "Solid.Ioc.Registration.Specs.Tests.Contracts\Solid.IoC.Registration.Specs.Tests.Contracts.csproj", "{C21F3528-E8D7-4F9A-9B07-87C1F701F04F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Solid.IoC.Registration.Specs.Tests.Contracts", "Solid.Ioc.Registration.Specs.Tests.Contracts\Solid.IoC.Registration.Specs.Tests.Contracts.csproj", "{C21F3528-E8D7-4F9A-9B07-87C1F701F04F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Solid.Ioc.Registration.Specs.Tests.Implementations", "Solid.Ioc.Registration.Specs.Tests.Implementations\Solid.Ioc.Registration.Specs.Tests.Implementations.csproj", "{D4B29EE9-000C-4A1F-A267-B17787BC426B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Solid.IoC.Registration.Specs.Tests.Implementations", "Solid.Ioc.Registration.Specs.Tests.Implementations\Solid.IoC.Registration.Specs.Tests.Implementations.csproj", "{D4B29EE9-000C-4A1F-A267-B17787BC426B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Adapters", "Adapters", "{54B1398B-D7CB-4207-B538-9E38C17699D4}" EndProject diff --git a/appveyor.yml b/appveyor.yml index a2ff7b6b..35717f1d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 2.3.1.{build} +version: 2.3.2.{build} init: - dotnet tool install --global SpecFlow.Plus.LivingDoc.CLI configuration: Release diff --git a/common/Common.Bootstrapping/Common.Bootstrapping.csproj b/common/Common.Bootstrapping/Common.Bootstrapping.csproj index 79b19a4a..2172d44d 100644 --- a/common/Common.Bootstrapping/Common.Bootstrapping.csproj +++ b/common/Common.Bootstrapping/Common.Bootstrapping.csproj @@ -4,7 +4,7 @@ false - + diff --git a/common/Common.Bootstrapping/CustomDynamicAssemblyLoader.cs b/common/Common.Bootstrapping/CustomDynamicAssemblyLoader.cs new file mode 100644 index 00000000..03d55354 --- /dev/null +++ b/common/Common.Bootstrapping/CustomDynamicAssemblyLoader.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using McMaster.NETCore.Plugins; + +namespace Common.Bootstrapping +{ + internal static class CustomDynamicAssemblyLoader + { + internal static IEnumerable Get(IEnumerable files) + { + return files.Select(r => + PluginLoader.CreateFromAssemblyFile(Path.Combine(Directory.GetCurrentDirectory(), r), + config => config.PreferSharedTypes = true) + .LoadDefaultAssembly()).ToArray(); + } + } +} \ No newline at end of file diff --git a/common/Common.Bootstrapping/DynamicAssemblyLoader.cs b/common/Common.Bootstrapping/DynamicAssemblyLoader.cs index 2ccb924d..a4a778e6 100644 --- a/common/Common.Bootstrapping/DynamicAssemblyLoader.cs +++ b/common/Common.Bootstrapping/DynamicAssemblyLoader.cs @@ -2,7 +2,7 @@ using System.IO; using System.Linq; using System.Reflection; -using McMaster.NETCore.Plugins; +using System.Runtime.Loader; namespace Common.Bootstrapping { @@ -10,10 +10,9 @@ internal static class DynamicAssemblyLoader { internal static IEnumerable Get(IEnumerable files) { - return files.Select(r => - PluginLoader.CreateFromAssemblyFile(Path.Combine(Directory.GetCurrentDirectory(), r), - config => config.PreferSharedTypes = true) - .LoadDefaultAssembly()).ToArray(); + return files.Select(r => AssemblyLoadContext.Default + .LoadFromAssemblyPath(Path.Combine(Directory.GetCurrentDirectory(),r))) + .ToArray(); } } } diff --git a/devops/deploy/deploy-all.bat b/devops/deploy/deploy-all.bat index e5ad36d2..defcdea2 100644 --- a/devops/deploy/deploy-all.bat +++ b/devops/deploy/deploy-all.bat @@ -1,5 +1,5 @@ rem TODO: Use common source for all version instances -SET version=2.3.1 +SET version=2.3.2 rem TODO: Refactor using loop and automatic discovery call deploy-single.bat Solid.Bootstrapping %version% call deploy-single.bat Solid.Common %version% diff --git a/devops/pack/solid.bootstrapping/contents/Solid.Bootstrapping.nuspec b/devops/pack/solid.bootstrapping/contents/Solid.Bootstrapping.nuspec index 279d4f61..aaab9fb9 100644 --- a/devops/pack/solid.bootstrapping/contents/Solid.Bootstrapping.nuspec +++ b/devops/pack/solid.bootstrapping/contents/Solid.Bootstrapping.nuspec @@ -2,7 +2,7 @@ Solid.Bootstrapping - 2.3.1 + 2.3.2 Solid.Bootstrapping Gennady Verdel Gennady Verdel @@ -14,13 +14,14 @@ over different bootstrapping capabilities: having ioc container, etc. as well as the most common middlewares to be used during bootstrapping This package provides abstractions over different bootstrapping capabilities: having ioc container, etc. - Checked compatibility with .NET 5 + Added support for default registration method. - - - - - + + + + + + \ No newline at end of file diff --git a/devops/pack/solid.common.core/contents/Solid.Common.Core.nuspec b/devops/pack/solid.common.core/contents/Solid.Common.Core.nuspec index 7ac1c2a5..f144f516 100644 --- a/devops/pack/solid.common.core/contents/Solid.Common.Core.nuspec +++ b/devops/pack/solid.common.core/contents/Solid.Common.Core.nuspec @@ -2,7 +2,7 @@ Solid.Common.Core - 2.3.1 + 2.3.2 Solid.Common.Core Gennady Verdel Gennady Verdel @@ -14,7 +14,7 @@ This package provides common abstractions Checked compatibility with .NET 5 - + \ No newline at end of file diff --git a/devops/pack/solid.common/contents/Solid.Common.nuspec b/devops/pack/solid.common/contents/Solid.Common.nuspec index b5d21df8..69a4198b 100644 --- a/devops/pack/solid.common/contents/Solid.Common.nuspec +++ b/devops/pack/solid.common/contents/Solid.Common.nuspec @@ -2,7 +2,7 @@ Solid.Common - 2.3.1 + 2.3.2 Solid.Common Gennady Verdel Gennady Verdel @@ -14,7 +14,7 @@ This package provides platform-specific implementation for common services Checked compatibility with .NET 5 - + \ No newline at end of file diff --git a/devops/pack/solid.core/contents/solid.core.nuspec b/devops/pack/solid.core/contents/solid.core.nuspec index 177e9625..feed7357 100644 --- a/devops/pack/solid.core/contents/solid.core.nuspec +++ b/devops/pack/solid.core/contents/solid.core.nuspec @@ -2,7 +2,7 @@ Solid.Core - 2.3.1 + 2.3.2 Solid.Core Gennady Verdel Gennady Verdel diff --git a/devops/pack/solid.extensibility/contents/Solid.Extensibility.nuspec b/devops/pack/solid.extensibility/contents/Solid.Extensibility.nuspec index ccc1b281..33bb534d 100644 --- a/devops/pack/solid.extensibility/contents/Solid.Extensibility.nuspec +++ b/devops/pack/solid.extensibility/contents/Solid.Extensibility.nuspec @@ -2,7 +2,7 @@ Solid.Extensibility - 2.3.1 + 2.3.2 Solid.Extensibility Gennady Verdel Gennady Verdel @@ -14,8 +14,8 @@ This package provides interfaces and wrappers for extensible objects Checked compatibility with .NET 5 - - + + \ No newline at end of file diff --git a/devops/pack/solid.ioc.adapters.bodi/contents/Solid.IoC.Adapters.BoDi.nuspec b/devops/pack/solid.ioc.adapters.bodi/contents/Solid.IoC.Adapters.BoDi.nuspec index 2e4acc85..370db901 100644 --- a/devops/pack/solid.ioc.adapters.bodi/contents/Solid.IoC.Adapters.BoDi.nuspec +++ b/devops/pack/solid.ioc.adapters.bodi/contents/Solid.IoC.Adapters.BoDi.nuspec @@ -2,7 +2,7 @@ Solid.IoC.Adapters.BoDi - 2.3.1 + 2.3.2 Solid.IoC.Adapters.BoDi Gennady Verdel Gennady Verdel @@ -15,7 +15,7 @@ Checked compatibility with .NET 5 - + \ No newline at end of file diff --git a/devops/pack/solid.ioc.registration/contents/Solid.IoC.Registration.nuspec b/devops/pack/solid.ioc.registration/contents/Solid.IoC.Registration.nuspec index 9e4bd364..b5becf31 100644 --- a/devops/pack/solid.ioc.registration/contents/Solid.IoC.Registration.nuspec +++ b/devops/pack/solid.ioc.registration/contents/Solid.IoC.Registration.nuspec @@ -2,7 +2,7 @@ Solid.IoC.Registration - 2.3.1 + 2.3.2 Solid.IoC.Registration Gennady Verdel Gennady Verdel @@ -12,6 +12,6 @@ https://github.com/godrose/Solid/blob/master/assets/icon.png?raw=true This package provides means for automagical registration into an IoC container. This package provides means for automagical registration into an IoC container. - Checked compatibility with .NET 5 + Added support for default registration method. \ No newline at end of file diff --git a/devops/pack/solid.patterns.builder/contents/Solid.Patterns.Builder.nuspec b/devops/pack/solid.patterns.builder/contents/Solid.Patterns.Builder.nuspec index 4bd7001b..6341aa58 100644 --- a/devops/pack/solid.patterns.builder/contents/Solid.Patterns.Builder.nuspec +++ b/devops/pack/solid.patterns.builder/contents/Solid.Patterns.Builder.nuspec @@ -2,7 +2,7 @@ Solid.Patterns.Builder - 2.3.1 + 2.3.2 Solid.Patterns.Builder Gennady Verdel Gennady Verdel diff --git a/devops/pack/solid.patterns.chainofresponsibility/contents/Solid.Patterns.ChainOfResponsibility.nuspec b/devops/pack/solid.patterns.chainofresponsibility/contents/Solid.Patterns.ChainOfResponsibility.nuspec index 8f221b3f..bfcefbd6 100644 --- a/devops/pack/solid.patterns.chainofresponsibility/contents/Solid.Patterns.ChainOfResponsibility.nuspec +++ b/devops/pack/solid.patterns.chainofresponsibility/contents/Solid.Patterns.ChainOfResponsibility.nuspec @@ -2,7 +2,7 @@ Solid.Patterns.ChainOfResponsibility - 2.3.1 + 2.3.2 Solid.Patterns.ChainOfResponsibility Gennady Verdel Gennady Verdel diff --git a/devops/pack/solid.patterns.memento/contents/Solid.Patterns.Memento.nuspec b/devops/pack/solid.patterns.memento/contents/Solid.Patterns.Memento.nuspec index a9997c5c..44b23c18 100644 --- a/devops/pack/solid.patterns.memento/contents/Solid.Patterns.Memento.nuspec +++ b/devops/pack/solid.patterns.memento/contents/Solid.Patterns.Memento.nuspec @@ -2,7 +2,7 @@ Solid.Patterns.Memento - 2.3.1 + 2.3.2 Solid.Patterns.Memento Gennady Verdel Gennady Verdel diff --git a/devops/pack/solid.patterns.visitor/contents/Solid.Patterns.Visitor.nuspec b/devops/pack/solid.patterns.visitor/contents/Solid.Patterns.Visitor.nuspec index f80f0c20..f7d16e24 100644 --- a/devops/pack/solid.patterns.visitor/contents/Solid.Patterns.Visitor.nuspec +++ b/devops/pack/solid.patterns.visitor/contents/Solid.Patterns.Visitor.nuspec @@ -2,7 +2,7 @@ Solid.Patterns.Visitor - 2.3.1 + 2.3.2 Solid.Patterns.Visitor Gennady Verdel Gennady Verdel diff --git a/devops/pack/solid.practices.composition.client/contents/Solid.Practices.Composition.Client.nuspec b/devops/pack/solid.practices.composition.client/contents/Solid.Practices.Composition.Client.nuspec index 8e4d6ea4..5e58c895 100644 --- a/devops/pack/solid.practices.composition.client/contents/Solid.Practices.Composition.Client.nuspec +++ b/devops/pack/solid.practices.composition.client/contents/Solid.Practices.Composition.Client.nuspec @@ -2,7 +2,7 @@ Solid.Practices.Composition.Client - 2.3.1 + 2.3.2 Solid.Practices.Composition.Client Gennady Verdel Gennady Verdel @@ -14,7 +14,7 @@ This package provides utilities for composing modular client applications. Checked compatibility with .NET 5 - + \ No newline at end of file diff --git a/devops/pack/solid.practices.composition.core/contents/Solid.Practices.Composition.Core.nuspec b/devops/pack/solid.practices.composition.core/contents/Solid.Practices.Composition.Core.nuspec index dc2f7a04..9e3329fc 100644 --- a/devops/pack/solid.practices.composition.core/contents/Solid.Practices.Composition.Core.nuspec +++ b/devops/pack/solid.practices.composition.core/contents/Solid.Practices.Composition.Core.nuspec @@ -2,7 +2,7 @@ Solid.Practices.Composition.Core - 2.3.1 + 2.3.2 Solid.Practices.Composition.Core Gennady Verdel Gennady Verdel @@ -16,10 +16,10 @@ composing modular applications. composing modular applications. Checked compatibility with .NET 5 - - - - + + + + \ No newline at end of file diff --git a/devops/pack/solid.practices.composition.web/contents/Solid.Practices.Composition.Web.nuspec b/devops/pack/solid.practices.composition.web/contents/Solid.Practices.Composition.Web.nuspec index e059dea9..850bf8fd 100644 --- a/devops/pack/solid.practices.composition.web/contents/Solid.Practices.Composition.Web.nuspec +++ b/devops/pack/solid.practices.composition.web/contents/Solid.Practices.Composition.Web.nuspec @@ -2,7 +2,7 @@ Solid.Practices.Composition.Web - 2.3.1 + 2.3.2 Solid.Practices.Composition.Web Gennady Verdel Gennady Verdel @@ -15,7 +15,7 @@ composing modular web server applications. composing modular web server applications. Checked compatibility with .NET 5 - + \ No newline at end of file diff --git a/devops/pack/solid.practices.ioc/contents/Solid.Practices.IoC.nuspec b/devops/pack/solid.practices.ioc/contents/Solid.Practices.IoC.nuspec index 69144b70..52718cc2 100644 --- a/devops/pack/solid.practices.ioc/contents/Solid.Practices.IoC.nuspec +++ b/devops/pack/solid.practices.ioc/contents/Solid.Practices.IoC.nuspec @@ -2,7 +2,7 @@ Solid.Practices.IoC - 2.3.1 + 2.3.2 Solid.Practices.IoC Gennady Verdel Gennady Verdel diff --git a/devops/pack/solid.practices.middleware/contents/Solid.Practices.Middleware.nuspec b/devops/pack/solid.practices.middleware/contents/Solid.Practices.Middleware.nuspec index 98ad7413..ae9031ba 100644 --- a/devops/pack/solid.practices.middleware/contents/Solid.Practices.Middleware.nuspec +++ b/devops/pack/solid.practices.middleware/contents/Solid.Practices.Middleware.nuspec @@ -2,7 +2,7 @@ Solid.Practices.Middleware - 2.3.1 + 2.3.2 Solid.Practices.Middleware Gennady Verdel Gennady Verdel @@ -14,7 +14,7 @@ This package contains middleware interface. Checked compatibility with .NET 5 - + \ No newline at end of file diff --git a/devops/pack/solid.practices.modularity/contents/Solid.Practices.Modularity.nuspec b/devops/pack/solid.practices.modularity/contents/Solid.Practices.Modularity.nuspec index b083c323..f8b37ced 100644 --- a/devops/pack/solid.practices.modularity/contents/Solid.Practices.Modularity.nuspec +++ b/devops/pack/solid.practices.modularity/contents/Solid.Practices.Modularity.nuspec @@ -2,7 +2,7 @@ Solid.Practices.Modularity - 2.3.1 + 2.3.2 Solid.Practices.Modularity Gennady Verdel Gennady Verdel @@ -14,9 +14,9 @@ This package provides means for composing modular applications. Checked compatibility with .NET 5 - - - + + + \ No newline at end of file diff --git a/devops/pack/solid.practices.scheduling/contents/Solid.Practices.Scheduling.nuspec b/devops/pack/solid.practices.scheduling/contents/Solid.Practices.Scheduling.nuspec index 0207f085..f76d111b 100644 --- a/devops/pack/solid.practices.scheduling/contents/Solid.Practices.Scheduling.nuspec +++ b/devops/pack/solid.practices.scheduling/contents/Solid.Practices.Scheduling.nuspec @@ -2,7 +2,7 @@ Solid.Practices.Scheduling - 2.3.1 + 2.3.2 Solid.Practices.Scheduling Gennady Verdel Gennady Verdel diff --git a/devops/publish/publish-all.bat b/devops/publish/publish-all.bat index 746673ae..ea0ef025 100644 --- a/devops/publish/publish-all.bat +++ b/devops/publish/publish-all.bat @@ -2,7 +2,7 @@ cd ../.. nuget restore cd devops/publish PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '../build/build-all.ps1'" -SET package_version=2.3.1 +SET package_version=2.3.2 cd ../test call test-all cd ../pack diff --git a/devops/publish/publish-single.bat b/devops/publish/publish-single.bat index 992747a0..9992c617 100644 --- a/devops/publish/publish-single.bat +++ b/devops/publish/publish-single.bat @@ -3,7 +3,7 @@ nuget restore cd devops/publish PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '../build/build-all.ps1'" SET package_name=%1 -SET package_version=2.3.1 +SET package_version=2.3.2 SET target=../../../packages/Tests-All cd ../test call test-all diff --git a/devops/update/UpdateUtil/Properties/launchSettings.json b/devops/update/UpdateUtil/Properties/launchSettings.json index 2b105da2..d5f63dd0 100644 --- a/devops/update/UpdateUtil/Properties/launchSettings.json +++ b/devops/update/UpdateUtil/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "UpdateUtil": { "commandName": "Project", - "commandLineArgs": "bump-version Solid 2.3.1" + "commandLineArgs": "bump-version Solid 2.3.2" } } } \ No newline at end of file