public Game(Player[] players, CardTypeFactory cardTypeFactory, EffectFactory effectFactory) { if (players is null) { throw new ArgumentNullException("players"); } if (players.Length <= 0) { throw new ArgumentException("Player array must not be empty!", "players"); } if (cardTypeFactory is null) { throw new ArgumentNullException("cardTypeFactory"); } if (effectFactory is null) { throw new ArgumentNullException("effectFactory"); } // Initialize this.registry = new Registry(); this.players = new List <Player>(); // Handle parameters foreach (var player in players) { this.players.Add(player); } effectFactory.Initialize(this, registry); cardTypeFactory.Initialize(registry); }