Uso de inyector simple con unidad de trabajo y patrón de repositorio en forma de Windows

Estoy tratando de implementar IoC en mi aplicación de formulario de Windows. Mi elección recayó en Simple Injector, porque es rápido y liviano. También implemento la unidad de trabajo y el patrón de repositorio en mis aplicaciones. Aquí está la estructura:

DbContext:

public class MemberContext : DbContext
{
    public MemberContext()
        : base("Name=MemberContext")
    { }

    public DbSet<Member> Members { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();\
    }
}

Modelo:

public class Member
{
    public int MemberID { get; set; }
    public string Name { get; set; }
}

GenericRepository:

public abstract class GenericRepository<TEntity> : IGenericRepository<TEntity> 
    where TEntity : class
{
    internal DbContext context;
    internal DbSet<TEntity> dbSet;

    public GenericRepository(DbContext context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    }

    public virtual void Insert(TEntity entity)
    {
        dbSet.Add(entity);
    }
}

MemberRepository:

public class MemberRepository : GenericRepository<Member>, IMemberRepository
{
    public MemberRepository(DbContext context)
        : base(context)
    { }
}

UnitOfWork:

public class UnitOfWork : IUnitOfWork
{
    public DbContext context;

    public UnitOfWork(DbContext context)
    {
        this.context = context;
    }

    public void SaveChanges()
    {
        context.SaveChanges();
    }

    private bool disposed = false;

    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                context.Dispose();
            }
        }

        this.disposed = true;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
}

MemberService:

public class MemberService : IMemberService
{
    private readonly IUnitOfWork unitOfWork;
    private readonly IMemberRepository memberRepository;

    public MemberService(IUnitOfWork unitOfWork, IMemberRepository memberRepository)
    {
        this.unitOfWork = unitOfWork;
        this.memberRepository = memberRepository;
    }

    public void Save(Member member)
    {
        Save(new List<Member> { member });
    }

    public void Save(List<Member> members)
    {
        members.ForEach(m =>
            {
                if (m.MemberID == default(int))
                {
                    memberRepository.Insert(m);
                }
            });
        unitOfWork.SaveChanges();
    }
}

En el formulario de miembro, solo agrego un cuadro de texto para ingresar el nombre del miembro y un botón para guardar en la base de datos. Este es el código en forma de miembro:

frmMember:

public partial class frmMember : Form
{
    private readonly IMemberService memberService;

    public frmMember(IMemberService memberService)
    {
        InitializeComponent();

        this.memberService = memberService;
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        Member member = new Member();
        member.Name = txtName.Text;
        memberService.Save(member);
    }
}

Implemento el SimpleInjector (consultehttp://simpleinjector.readthedocs.org/en/latest/windowsformsintegration.html) enProgram.cs como se ve en el siguiente código:

static class Program
{
    private static Container container;

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Bootstrap();
        Application.Run(new frmMember((MemberService)container.GetInstance(typeof(IMemberService))));
    }

    private static void Bootstrap()
    {
        container = new Container();

        container.RegisterSingle<IMemberRepository, MemberRepository>();
        container.Register<IMemberService, MemberService>();
        container.Register<DbContext, MemberContext>();
        container.Register<IUnitOfWork, UnitOfWork>();

        container.Verify();
    }
}

Cuando ejecuto el programa y agrego un miembro, no se guarda en la base de datos. Si yo cambiaracontainer.Register acontainer.RegisterSingle, se guardará en la base de datos. De la documentación,RegisterSingle Haré que mi clase sea Singleton. No puedo usar RegisterLifeTimeScope porque generará un error

"El delegado registrado para el tipo IMemberService lanzó una excepción. El IUnitOfWork está registrado como estilo de vida 'Lifetime Scope', pero la instancia se solicita fuera del contexto de un Lifetime Scope"

1) ¿Cómo usar SimpleInjector en Windows Form con el patrón UnitOfWork & Repository?
2) ¿Implemento los patrones correctamente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta