Drill is the Dependency Resolution and Instance Location Layer, an abstraction to DI containers, service locators and the like facilitating loose coupling.
What does Drill do?
Drill abstracts the systems used to obtain instances of objects in your application. Drill allows tools like dependency injection/inversion of control containers and service locators to become pluggable components called DrillBits. When you integrate Drill into your project, you resolve object instances using Drill. Drill is very flexible and extensible. It can even allow multiple containers and service locators to be integrated into a single dependency resolver while hiding the complexity. This can be useful when integrating multiple codebases that use different object resolution schemes. Drill is also useful for new development, even when you're only using one DI container because it unlocks your codebase from the DI container allowing you to change the underlying system without affecting all of the code that references object resolution. Drill provides the capability of building custom layer super types to provide custom behavior while allowing the base behavior to remain intact.