2010-10-18 4 views

risposta

47

Al momento si desidera modificare la registrazione, creare un nuovo ContainerBuilder, registrare la nuova istanza, e chiamare Update passando nel contenitore:

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

L'aggiornamento (contenitore) è stato obsoleto. Si consiglia di ricostruire il contenitore. –

19

Un'alternativa potrebbe essere quella di registrare un delegato che è in grado per cambiare l'istanza sottostante fornita dal contenitore. Si consideri il seguente codice:

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

È ora possibile risolvere l'azione per ottenere un delegato che può cambiare la registrazione:

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

Nota: se potesse approfondire quando e perché è necessario modificare l'istanza, forse potremmo anche trovare una soluzione migliore.