Extended type check in registration classes to handle open generics

A call to `IsAssignableFrom` always returns false when checking open generics, e.g.: `typeof(IEnumerable<>).IsAssignableFrom(typeof(IList<>))`