An architectural approach to the correct and automatic assembly of evolving component-based systems