2012-12-06 5 views
8

In Simple Injector gebe ich folgendes tun:Einfache Injector hart codierte Werte in Konstruktor

container.RegisterSingle<IAuctionContext>(() => new AuctionContext(
    new Uri("http://localhost:60001/AuctionDataService.svc/"))); 

Was ich hier tun, ist zu sagen, dass, wenn IAuctionContext gefunden wird, ersetzen Sie es mit diesem neuen AuctionContext. Das Problem ist, dass beim Aufruf von RegisterSingle nur eine einzige Instanz von AuctionContext verwendet wird. Was ich möchte, dass es in der Lage ist, einen Uri Parameter wie oben zu übergeben, aber nicht die einzelne Instanz, sondern jedes Mal eine neue Instanz zulässt.

Wie ist das möglich?

+0

Ich habe Ihre Frage bearbeitet und Ihre Unterschrift per http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts entfernt. Bitte unterlassen Sie Signaturen. =) –

+0

Ich werde dies beim nächsten Mal beachten, danke. –

Antwort

18

Der Wert, den Sie injizieren möchten, ist ein einfacher fest codierter Wert. Für konstante Werte wie hartcodierte Werte und Konfigurationswerte verwenden, nur die Register Methode:

var uri = new Uri("http://localhost:60001/AuctionDataService.svc/"); 

container.Register<IAuctionContext>(() => new AuctionContext(uri)); 

Register Das Verfahren sorgt für eine neue Instanz jedes Mal zurückgeführt wird.

Wenn es darum geht, Werte einzugeben, die sich im Laufe der Anwendung ändern könnten, lesen Sie bitte this article about injecting runtime data.