Destroyed instance of Prefab, can't spawn it back.

I’m making a game with bacteria and viruses and such. When a virus comes near enough the bacteria the bacteria is infected, the bacteria gets a new script from the virus. Here’s the part of the virus script that does this:

public class Virus : MonoBehaviour
{
    private GameObject host; //The bacteria choosen by the virus.
    public GameObject virusType;
    public int spawnTimes;

    void InjectCode()
    {
        host.AddComponent<InfectedScript>();
        host.GetComponent<InfectedScript>().virusType = virusType;
        host.GetComponent<InfectedScript>().spawnTimes = spawnTimes;
        Destroy(this.gameObject);
    }
}

The virus has it’s own Prefab stored inside “virusType”. Because of this the new script attached to the bacteria should also store the prefab of the virus. In the inspector it says “None (Game Object)” is stored in the “virusType”, so nothing is saved there then? I erased the part of the script that destroys the virus after it has infected a bacteria and then things works as intended. I came to the conclusion that it was the instance of the Prefab that were stored in “virusType” and not the Prefab itself(if that makes any sense). However even when I’ve manually deleted the virus(deleting it from the Hierarchy) the infected bacteria works as intended. What’s going on? Does the “Destroy(gameObject)” line destroy the virus so soon it’s not done with the earlier lines or why isn’t it working specifically when destroyed by it’s own code?

Honestly, if it were me, I would have a script controlling all interactions between Virus and Hosts and when they collide or whatever, I would save the position in a Vector3, destroy the host and spawn a new virus in that position, if that makes sense.