Towards an architectural approach for the dynamic and automatic composition of software components