Macro can be used on free functions and impls, including impl traits, with only one implement
method. It will generate Dependency impl in which calling function that will tagged by this
macro.
We recommend using this macro in production code.
Derive macro can be used on structs with named fields when all fields implements Dependency trait or
fields described using #[init(...)] attr.
We do not recommend using this macro in production code.