Maximize compatibility with IoC containers by using generics first class

as some containers don't have Register and Resolver overloads that take a Type as a parameter, but only a generic parameter.