2010-10-18 12 views

Respuesta

47

En el momento que desee cambiar el registro, crear un nuevo ContainerBuilder, registrar la nueva instancia, y llamar a Update que pasa en el contenedor:

// at some later point... 
builder = new ContainerBuilder(); 
builder.RegisterInstance(myType2); 
builder.Update(container); 
+1

La actualización (contenedor) ha quedado obsoleta. Se recomienda reconstruir el contenedor. –

19

Una alternativa podría ser para registrar un delegado que es capaz para cambiar la instancia subyacente proporcionada por el contenedor. Considere el siguiente código:

var theInstance = new MyType(); 
var builder = new ContainerBuilder(); 
builder.Register(context => theInstance); 
builder.Register<Action<MyType>>(context => newInstance => theInstance = newInstance); 
var container = builder.Build(); 

Ahora puede resolver la acción para obtener un delegado que puede cambiar el registro:

var updateInstance = c.Resolve<Action<MyType>>(); 
updateInstance(new MyType()); 

Nota: si se puede elaborar en cuando y qué necesita cambiar la instancia, tal vez incluso podríamos encontrar una mejor solución.

Cuestiones relacionadas