>>645
俺はこういう風に理解した。
----

interface IHogeFactory
{
    IHoge CreateInstance();
}

static class HogeCatalog
{
    private static Dictonary<Type, IHogeFactory> catalog = new Dictonary<Type, IHogeFactory>();
    public static IHoge CreateInstance( Type type )
    {
        return catalog[type].CreateInstance();
    }
    public static void Regitster( Type type, IHogeFactory factory ) {
        catalog[type] = factory;
    }
}

class HogeA: IHoge { }

class HogeFactoryA : IHogeFactory
{
    public static HogeFactoryA() { HogeCatalog.Register( typeof(HogeA), new HogeFactoryA(); }
    public IHoge CreateInstance() { return new HogeA(); }
}