EDIT: I just noticed your intent was accessing the DI. As of right now you can't because they fire too late. The rest of this answer is to do the template stuff you asked about.
I was pretty interested in this question so I spent way more time than I thought I would today looking into this.
From what I can tell at the moment there isn't an EASY way to do this.
You have 3 main options:
1.Use *ng-if with known components
This is by far the simplest way of solving this. By only having a few options you can only load the component you need
<special *ngIf="!type">Default</special>
<special *ngIf="type == 'awesome'"> I'm Awesome </special>
<special *ngIf="type == 'admin'">Admin Only</special>
Pros: Easy, template syntax. Cons: Must know types, gets annoying when many options
2. Create the components dynamically with DynamicComponentLoader
This gets hairy and pretty advanced pretty quick. You basically call loading a component based on passed parameters. This would allow you to define the template value and then pass it to create a new component.
This is a good article to learn how to start using it
Here is a S.O. Answer that uses this exact method
Here is someone using it to load components 100% dynamically(Super hacky, messes with the asyncRouter)
Pros: The "Angular" way of solving this issue, super flexible.
Cons: Pretty involved if you just need a simple switch. Not many people doing it so help wouldn't be so easy.
3. Cheat (go outside of Angular)
It is just javascript after all. You could create a class or object that you stick on the window
and call a self encapsulated function
template: (function() {
return "<supertemplate-" + window.superTempId + "' />";
}())
(DISCLAIMER) I haven't tested this, but it seems like it would work
The only thing is WHEN. That's why you can't do the other services as they don't exist when the metadata is being done, but if you set your template or whatever first I don't see why it wouldn't work
Pros: Likely to work without a ton of hassle
Cons: Very much not the "Angular Way." Super Hacky.
It's a fairly common request so I assume we'll see some more on this with either a "Preferred Method" or more standard functionality..
Hope that helps!