From 65fd5ac7dd507c462ceb8f80b5a017c8cede86a0 Mon Sep 17 00:00:00 2001 From: Adam Storr Date: Sat, 2 Jun 2018 21:36:20 +0100 Subject: [PATCH] Using enums as generic constraints in 7.3 --- src/StrategyPatternExample.sln | 2 +- src/StrategyPatternExample/IMathOperator.cs | 8 +++++--- src/StrategyPatternExample/MathStrategy.cs | 4 ++-- src/StrategyPatternExample/Operators/AddOperator.cs | 2 +- src/StrategyPatternExample/Operators/DivideOperator.cs | 2 +- src/StrategyPatternExample/Operators/MultipleOperator.cs | 2 +- src/StrategyPatternExample/Operators/SubtractOperator.cs | 2 +- src/StrategyPatternExample/Startup.cs | 8 ++++---- src/StrategyPatternExample/StrategyPatternExample.csproj | 8 ++++++++ 9 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/StrategyPatternExample.sln b/src/StrategyPatternExample.sln index 68af79a..23f5114 100644 --- a/src/StrategyPatternExample.sln +++ b/src/StrategyPatternExample.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27428.1 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StrategyPatternExample", "StrategyPatternExample\StrategyPatternExample.csproj", "{33A47031-B45D-4CF2-8EA3-7404D506E258}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StrategyPatternExample", "StrategyPatternExample\StrategyPatternExample.csproj", "{33A47031-B45D-4CF2-8EA3-7404D506E258}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/StrategyPatternExample/IMathOperator.cs b/src/StrategyPatternExample/IMathOperator.cs index 7451c71..2fe3478 100644 --- a/src/StrategyPatternExample/IMathOperator.cs +++ b/src/StrategyPatternExample/IMathOperator.cs @@ -1,8 +1,10 @@ -namespace StrategyPatternExample +using System; + +namespace StrategyPatternExample { - public interface IMathOperator + public interface IMathOperator where T : Enum { - Operator Operator { get; } + T Operator { get; } int Calculate(int a, int b); } diff --git a/src/StrategyPatternExample/MathStrategy.cs b/src/StrategyPatternExample/MathStrategy.cs index ed864a9..ad58814 100644 --- a/src/StrategyPatternExample/MathStrategy.cs +++ b/src/StrategyPatternExample/MathStrategy.cs @@ -6,9 +6,9 @@ namespace StrategyPatternExample { public class MathStrategy : IMathStrategy { - private readonly IEnumerable _operators; + private readonly IEnumerable> _operators; - public MathStrategy(IEnumerable operators) + public MathStrategy(IEnumerable> operators) { _operators = operators; } diff --git a/src/StrategyPatternExample/Operators/AddOperator.cs b/src/StrategyPatternExample/Operators/AddOperator.cs index 1e127f1..24be84b 100644 --- a/src/StrategyPatternExample/Operators/AddOperator.cs +++ b/src/StrategyPatternExample/Operators/AddOperator.cs @@ -1,6 +1,6 @@ namespace StrategyPatternExample { - public class AddOperator : IMathOperator + public class AddOperator : IMathOperator { public Operator Operator => Operator.Add; diff --git a/src/StrategyPatternExample/Operators/DivideOperator.cs b/src/StrategyPatternExample/Operators/DivideOperator.cs index c428301..fd22154 100644 --- a/src/StrategyPatternExample/Operators/DivideOperator.cs +++ b/src/StrategyPatternExample/Operators/DivideOperator.cs @@ -2,7 +2,7 @@ namespace StrategyPatternExample { - public class DivideOperator : IMathOperator + public class DivideOperator : IMathOperator { public Operator Operator => Operator.Divide; diff --git a/src/StrategyPatternExample/Operators/MultipleOperator.cs b/src/StrategyPatternExample/Operators/MultipleOperator.cs index 5b075ce..e02c62a 100644 --- a/src/StrategyPatternExample/Operators/MultipleOperator.cs +++ b/src/StrategyPatternExample/Operators/MultipleOperator.cs @@ -1,6 +1,6 @@ namespace StrategyPatternExample { - public class MultipleOperator : IMathOperator + public class MultipleOperator : IMathOperator { public Operator Operator => Operator.Multiple; diff --git a/src/StrategyPatternExample/Operators/SubtractOperator.cs b/src/StrategyPatternExample/Operators/SubtractOperator.cs index dd5de7f..dc8d2c1 100644 --- a/src/StrategyPatternExample/Operators/SubtractOperator.cs +++ b/src/StrategyPatternExample/Operators/SubtractOperator.cs @@ -1,6 +1,6 @@ namespace StrategyPatternExample { - public class SubtractOperator : IMathOperator + public class SubtractOperator : IMathOperator { public Operator Operator => Operator.Substract; diff --git a/src/StrategyPatternExample/Startup.cs b/src/StrategyPatternExample/Startup.cs index 73dae71..5a64ac8 100644 --- a/src/StrategyPatternExample/Startup.cs +++ b/src/StrategyPatternExample/Startup.cs @@ -11,10 +11,10 @@ public void ConfigureServices(IServiceCollection services) services.AddMvc(); services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); + services.AddScoped, AddOperator>(); + services.AddScoped, SubtractOperator>(); + services.AddScoped, MultipleOperator>(); + services.AddScoped, DivideOperator>(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. diff --git a/src/StrategyPatternExample/StrategyPatternExample.csproj b/src/StrategyPatternExample/StrategyPatternExample.csproj index 965e3b7..b84de14 100644 --- a/src/StrategyPatternExample/StrategyPatternExample.csproj +++ b/src/StrategyPatternExample/StrategyPatternExample.csproj @@ -4,6 +4,14 @@ netcoreapp2.0 + + 7.3 + + + + 7.3 + +