class ProtocolInstallerRepository {

    public ProtocolInstaller<O> installerFor( ProtocolStack protocolStack )
    {
        ApplicationProtocol applicationProtocol = protocolStack.applicationProtocol();
        ProtocolInstaller.Factory<O,?> protocolInstaller = installers.get( applicationProtocol );

        ensureKnownProtocol( applicationProtocol, protocolInstaller );

        return protocolInstaller.create( getModifierProtocolInstallers( protocolStack ) );
    }

    public  ProtocolInstallerRepository( Collection<ProtocolInstaller.Factory<O, ?>> installers, Collection<ModifierProtocolInstaller<O>> modifiers );

}