2010-10-18 4 views

Antwort

47

Zu der Zeit Sie die Registrierung ändern möchten, erstellen Sie eine neue ContainerBuilder, die neue Instanz registrieren und Update im Behälter vorbei rufen:

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

Update (Container) wurde veraltet. Es wird empfohlen, den Container neu zu erstellen. –

19

Eine Alternative könnte sein, einen Delegierten zu registrieren, die der Lage ist, Ändern der zugrunde liegenden Instanz, die vom Container bereitgestellt wird. Betrachten Sie den folgenden Code ein:

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

können Sie lösen jetzt die Aktion einen Delegierten zu erhalten, die die Registrierung ändern können:

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

Hinweis:, wenn Sie auf erarbeiten könnte, wenn und warum Sie müssen die Instanz ändern, vielleicht könnten wir sogar eine bessere Lösung finden.