Winforms: cómo registrar formularios con el contenedor IoC

Antecedentes

Estoy construyendo una aplicación winforms donde estoy usando un contenedor IoC (SimpleInjector) para registrar mis tipos. En mi aplicación, la mayoría de las pantallas (es decir, formularios) solo tendrán una instancia en un momento dado.

Problema

Para los formularios que solo necesitan una instancia en un momento dado, puedo registrarlos como singletons:

container.Register<IHomeView, HomeView>(Lifestyle.Singleton);

Esto me permite usar el contenedor para realizar un seguimiento de todas las formas. En este caso, sin embargo, cuando se cierra un formulario, se eliminará (los formularios implementan IDisposable). Si la aplicación intenta abrir ese formulario nuevamente utilizando el contenedor, se eliminará la instancia del formulario del contenedor y se generará una excepción.

Pregunta

¿Cuál es la forma correcta de lidiar con esto? Actualmente veo dos soluciones:

Para cada formulario, anule el formulario cerca para ocultar el formulario, en lugar de cerrarlo. Realmente no me gusta esta idea. Siento que prefiero cerrar el formulario cada vez y comenzar con un formulario nuevo / nuevo.Registre el formulario con un estilo de vida transitorio en lugar de como un singleton. En este caso, el contenedor realmente solo actúa más como una fábrica. Me encuentro con dos problemas: a) pierdo la capacidad de rastrear formularios a través del contenedor, y, b) el contenedor arroja una excepción durante la verificación que dice que los tipos desechables no deben registrarse como transitorios (que no entiendo por qué eso es ) Estos problemas se aplican a los formularios en los que también necesitaré varias instancias a la vez.

Puedo evitar el problema b) suprimiendo la advertencia de diagnóstico durante la verificación.

registration = container.GetRegistration(typeof(ILoginView)).Registration;
registration.SuppressDiagnosticWarning(DiagnosticType.DisposableTransientComponent, "Winforms registration supression.");

¿Cuál es el enfoque correcto para tomar aquí? ¿Me estoy perdiendo de algo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta