refactor: make ViewFactory and Selector singletons, and convert ElementBinder into POJO