unitycontainer unity registertype ioc injectionconstructor containercontrolledlifetimemanager container attribute dependency-injection unity-container

dependency-injection - registertype - unity ioc



Unidad: Reemplace el tipo registrado con otro tipo en tiempo de ejecuciĆ³n (1)

El método RegisterInstance de UnityContainer siempre anulará la última entrada de registro si no los distingue por su nombre.

Así que si llamas

container.RegisterInstance<IHardware>(new HardwareB());

anulará el registro para la interfaz IHardware y recuperará HardwareB en el próximo intento de resolución

Tenemos un escenario donde el usuario puede elegir entre diferentes hardware en tiempo de ejecución. En el fondo, tenemos varias clases de hardware diferentes que implementan una interfaz IHardware . Nos gustaría usar Unity para registrar la instancia de hardware seleccionada actualmente para esta interfaz. Sin embargo, cuando el usuario selecciona otro hardware, esto nos obliga a reemplazar este registro en tiempo de ejecución.

El siguiente ejemplo podría aclarar esto:

public interface IHardware { // some methods... } public class HardwareA : IHardware { // ... } public class HardwareB : IHardware { // ... } container.RegisterInstance<IHardware>(new HardwareA()); // user selects new hardware somewhere in the configuration... // the following is invalid code, but can it be achieved another way? container.ReplaceInstance<IHardware>(new HardwareB());

¿Se puede lograr este comportamiento de alguna manera?

Por cierto: soy completamente consciente de que las instancias que ya se han resuelto desde el contenedor no serán reemplazadas por las nuevas instancias, por supuesto. Nosotros mismos nos encargaremos de resolver la instancia una vez más.