public static void Main()
var simProvider1 = new SimulationProvider<Guid>(new BaseFactsSimStateProvider());
var simState1 = simProvider1.GetSimulation(Guid.NewGuid());
Console.WriteLine(simState1);
var simProvider2 = new SimulationProvider<int>(new IntSimStateProvider());
var simState2 = simProvider2.GetSimulation(666);
Console.WriteLine(simState2);
public interface ISimulationProvider<T>
string GetSimulation(T initializationData);
public interface ISimStateProvider<T>
string GetSimState(T data);
public class BaseFactsSimStateProvider : ISimStateProvider<Guid>
public string GetSimState(Guid userId)
return string.Format("Base Facts For User: {0}", userId);
public class IntSimStateProvider : ISimStateProvider<int>
public string GetSimState(int data)
return string.Format("Base Facts For Integer: {0}", data);
public class SimulationProvider<T> : ISimulationProvider<T>
private readonly ISimStateProvider<T> simStateProvider;
public SimulationProvider(ISimStateProvider<T> simStateProvider)
this.simStateProvider = simStateProvider;
public string GetSimulation(T initializationData)
return simStateProvider.GetSimState(initializationData);