Instantiate over time?

How can I spawn objects over time and how can I randomize the number of objects within a set range, and how can I randomize the object type (ex: at the end of every 30 second interval spawn anywhere from 3-8 objects with the possibility of object A, Object B or Object C). Thank you.

public Transform[] ObjectsToSpawn;
public float SpawnInterval= 15;
public float MaxObjectsSpawned = 8;
public float MinObjectsSpawned = 3;

private float _NextSpawn

void Start() { _NextSpawn = Time.time + SpawnInterval;}
void Update()
{
if(Time.time >= _NextSpawn)
{
int objectsToSpawn = Random.Range(MinObjectsSpawned, MaxObjectsSpawned);
for(int i < 0; i < objectsToSpawn; ++i)
{
Instantiate(ObjectsToSpawn(Random.Range(0, ObjectsToSpawn.Length), transform.position. Quaternion.identity);
}
_NextSpawn = Time.time + SpawnInterval;
}
}

You can also you the Invoke method which call a another method after x seconds.