Many thanks for the replies. The key step that was stopping me was loading the embedded templates. I kept getting:
Invalid resource name (Samples.Contacts.Resources.ControlTemplates.Backend.ContactsItemsList.ascx) for assembly (Sample.Contacts, Version=18.104.22.168, Culture=neutral, PublicKeyToken=null) or empty template.
For those who want to use VB rather than C# the solution is to set the references to the templates as
RootNamespace.TemplateName.ascx, as the path is not needed by VB, it is with C#.
This blog helped me in the end