dependency api
optional dependency, self-provider