Abstract Factory Experiment
Well what you are trying to do is not strictly speaking an abstract factory. For it to be an abstract factory the use case should look like this:

UniversalFactory.Factory&lt;IFoo&gt;  // client has no idea about IFactory&lt;IFoo&gt; implementation
                .Create(... parameters ...); // client has no idea about IFoo implementation, returns IFoo


Ideally, you should not even need to pass parameters. That is why you are building factories after all. To delegate object creation.

Other minor remarks:


where T : TF - those are not very descriptive names for generic arguments. Perhaps you can come up with better naming.
var id = Convert.ToInt32(p[0]); - i'm not sure i like Convert here. It might hide bugs and misusages. I think that strong cast is better in that case.
public static IFoo Create(int id) - i don't see any reason to use factory method.

public class FooImpl : IFoo
{
    public int Id { get; private set; }

    public FooImpl(int id)
    {
        Id = id;
    }
}


this looks a lot cleaner. Also i think Id setter should be always private.


Overall, i think unless you are doing it for studying purposes, you should just grab an existing DI library, as you've metioned yourself :)