Foreach loop in coroutine only runs first iteration

I start a coroutine which contains a foreach loop meant to run a very simple initialisation method for multiple objects. The problem is that, regardless of how many objects are in the collection, the foreach loop only executes the method on the first object in the collection and then finishes.

I’ve no idea what’s wrong here and have exhausted my patience searching through multiple other answer posts without finding anything. Any ideas? It seems super strange to me…

Method which invokes StartCoroutine

public void LoadStory(StoryController storyView)
{
	_view = storyView;
	storyView.Story = story;
	storyView.transform.SetParent(transform, worldPositionStays: false);
	storyView.transform.SetAsFirstSibling();

	Canvas.ForceUpdateCanvases();

	StartCoroutine(CInitializeMediaControllers());

	UnloadStoryScreenEvent.Subscribe(OnUnloadStoryScreen);
}

The coroutine

private IEnumerator CInitializeMediaControllers()
{
	foreach( var mediaController in GetMediaControllers() )
	{
		mediaController.gameObject.SetActive(true);

		// Wait one frame for object to be completely active
		yield return null;

		mediaController.Init();

		// Wait one frame for anything in Init to be completely active
		yield return null;
	}
}

GetMediaControllers

private IEnumerable<MediaPlayerController> GetMediaControllers()
{
    return _view.GetComponentsInChildren<MediaPlayerController>(includeInactive: true);
}

The simple init method being invoked

public void Init()
{
	_mediaPlayer = GetComponent<MediaPlayer>();

	if( _mediaPlayer != null )
	{
		OpenVideo();
	}
}

i have seen this exact problem so many times and is always the same problem try and check if it works:

coroutines can only be called OF a monobehaviour in that case the class with the LoadStory, what happens is, when you desactivate the GameObject with the script attached to, the coroutines runs until it reaches the first Yield return statement, and it never gets called again