From 1af1850376f793a5d178ad716fffaaa0c89c246b Mon Sep 17 00:00:00 2001
From: "harald.martini@student.tugraz.at" <harald.martini@student.tugraz.at>
Date: Wed, 13 Oct 2021 10:04:47 +0200
Subject: [PATCH] Create Kernel in SimulatorFactory only once

---
 .../Impl/SimulatorFactory/SimulatorFactory.cs | 24 ++++++-------------
 .../SimulatorFactoryDeclaration.cs            |  6 ++---
 2 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs
index 59fb4431bd..c9970582d1 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs
@@ -61,7 +61,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
 	public abstract class SimulatorFactory : LoggingObject, ISimulatorFactory
 	{
 		private static int _jobNumberCounter;
-		
+		private static IKernel _kernel; //Kernel is only used when the SimulatorFactory is created with the Factory Method.
 
 		protected Func<ISimulatorFactory> _followingSimulatorFactoryCreator = null;
 
@@ -80,22 +80,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
 		[Obsolete("Creation of new SimulatorFactories should be done with SimulatorFactoryFactory NInject Factory", false)]
 		public static ISimulatorFactory CreateSimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer, IDeclarationReport declarationReport = null, IVTPReport vtpReport=null, bool validate = true)
 		{
-			return new StandardKernel(new VectoNinjectModule()).Get<ISimulatorFactoryFactory>().Factory(mode, dataProvider, writer, declarationReport, vtpReport, validate);
-			//switch (mode)
-			//{
-			//	case ExecutionMode.Declaration:
-
-			//		return new SimulatorFactoryDeclaration(dataProvider, writer, declarationReport, vtpReport, validate);
-			//	case ExecutionMode.Engineering:
-			//		return new SimulatorFactoryEngineering(dataProvider, writer, validate);
-			//	default:
-			//		throw new VectoException("Unkown factory mode in SimulatorFactory: {0}", mode);
-			//}
-		}
-		[Obsolete("Creation of new SimulatorFactories should be done with SimulatorFactoryFactory NInject Factory", false)]
-		public static ISimulatorFactory CreateSimulatorFactory(ExecutionMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer)
-		{
-			return CreateSimulatorFactory(mode, dataProvider, writer, null, null, true);
+			lock (_kernel) {
+				if (_kernel == null) {
+					_kernel = new StandardKernel(new VectoNinjectModule());
+				}
+			}
+			return _kernel.Get<ISimulatorFactoryFactory>().Factory(mode, dataProvider, writer, declarationReport, vtpReport, validate);
 		}
 
 		protected SimulatorFactory(ExecutionMode mode, IOutputDataWriter writer, bool validate = true)
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs
index 4558d8ffa0..4cdc0bfa28 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs
@@ -78,9 +78,6 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
 						DataReader = new DeclarationModeCompletedMultistageBusVectoRunDataFactory(
 							multistageVifInputData.MultistageJobInputData,
 							reportCompleted);
-
-						
-
 					}
 					else
 					{
@@ -142,7 +139,8 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory
 #pragma warning disable 618
 							var factory = CreateSimulatorFactory(_mode,
 #pragma warning restore 618
-								vifInputData, originalReportWriter,
+								vifInputData, 
+								originalReportWriter,
 								null,
 								vtpReport,
 								Validate);
-- 
GitLab