I have amended my original post with the solution.
In summary, the T and Y generic types needed to be defined as where T : new() where Y : class