Ein UserControl ist schnell dynamisch geladen:
Control c = Page.LoadControl("~/MyUserControl.ascx");
Spannend wird es, wenn dieses UserControl bzw. dessen Basisklasse, von der es erbt, öffentliche Eigenschaften hat, die beim Laden zwingend gesetzt werden müssen, weil es sonst nicht funktioniert.
Die Lösung für diese Aufgabe (bzw. eine der Möglichkeiten) ist der Gang über Reflection:
PropertyInfo p = c.GetType().GetProperty("MyProperty");
if(p != null)
p.SetValue(c, "Irgendein Objekt", null);
Das kann man natürlich alles noch schön dynamisch machen, und beispielsweise über ein Dictionary laufen, welches als Key den Namen der Eigenschaft, und als Value das Objekt, was da "rein" soll, beinhaltet.
Update:
Ich hätte vielleicht dazu schreiben sollen, dass ich das veranstaltet habe, weil ich den Typ des UserControls in dem Moment, wo es geladen wird, nicht kenne, und damit ein simples Casting ausfällt.