2010-10-18 7 views

Odpowiedz

47

W momencie chcesz zmienić rejestrację, należy utworzyć nowy ContainerBuilder, należy zarejestrować nową instancję, i nazywają Update przechodząc w pojemniku:

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

Aktualizacja (kontener) została zastąpiona. Zaleca się przebudowanie kontenera. –

19

Alternatywą może być zarejestrowanie delegata, który jest w stanie aby zmienić podstawową instancję dostarczoną przez kontener. Rozważmy następujący kod:

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

Teraz można rozwiązać akcję, aby uzyskać delegata, który może zmienić rejestracji:

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

Uwaga: jeśli można opracować na gdy i dlaczego musisz zmienić instancję, być może moglibyśmy nawet znaleźć lepsze rozwiązanie.

Powiązane problemy