10 Years later and I've just stumbled upon this same challenge. A lot of people ask this question (or a very similar question on SO) but there are few answers and none that are as direct as what I found in the Unity documentation.
Solution Discovery
I too had a class that needed a string passed in upon construction.
The answer is actually quite simple, but somewhat confusing.
Here's the answer from UnityContainer.org * with my alterations to refer to the OP's class (instead of the sample class used by the docs).
Dad is a simple class with [one] public constructors. When Resolve() is called, Unity will evaluate available constructors and select one with longest list of parameters it can satisfy with dependencies. It will create all required dependencies and pass them to selected constructor during initialization.
In this particular case Unity will select [available] constructor with parameter name of type String. However, constructor Dad(string name) has parameter of type String which is a primitive type. Unity can not create primitive types by itself. If you want to make these available for dependency injection you would need to register them with the container.
// Register string instance container.RegisterInstance("Frank"); // Resolve Dad container.Resolve<Dad>();
That's it! 🤯🤯
However, I'm not sure what happens if you have more than one type with a constructor which requires a string.
How do you know which string will be used with which constructor?