14

Ich habe, was ist wahrscheinlich eine einfache Frage hier über Castle Windsor, die ich nicht sehr lange verwendet habe. Ich versuche, einen Dienst mit einer bestimmten Instanz zu registrieren, die die Singleton-Implementierung des Dienstes sein wird.Angeben der Instanz für die Registrierung einer Komponente bei Castle Windsor

Der Container kann nicht versuchen, die Implementierung des Service selbst zu erstellen, da Abhängigkeiten vorhanden sind, die der Container nicht auflösen kann. Ich habe eine Instanz des Dienstes und möchte, dass dies die einzige Instanz ist, die für jeden verwendet wird, der den Dienst anfordert. Aber ich habe anscheinend sehr wenig Glück.

ich momentan habe Hoffnungen geweckt, indem Sie diesen Code verwenden:

container.Register(Component.For<IMyInterface>().Instance(serviceObj)); 

Aber Castle tut mit der Instanz ist ein .GetType tun() auf sie und die Art registrieren. Anforderungen für den Dienst führen anschließend dazu, dass der Container versucht, diesen Typ zu erstellen, und fehlschlägt, wenn er die Abhängigkeiten nicht füllen kann.

Also gibt es eine Möglichkeit zu tun, was ich hier tun möchte? Wenn nicht, erstelle ich eine Art von IServiceProvider, der die Instanz des Dienstes abruft und keine Abhängigkeiten für den zu füllenden Container hat. Aber das fühlt sich eher nach Arbeit an als nach der richtigen Lösung.

Irgendwelche Vorschläge? Vielen Dank!

Antwort

21

Versuchen Sie, die Methode AddComponentInstance für das Kernel-Objekt des Containers zu verwenden. Ich denke, das ist was du brauchst.


Bitte beachten Sie: Diese Technik ist veraltet. Verwenden Sie container.Register(Component.For<T>().Instance(myT)); statt (dank eouw0o83hf)

+0

Dank Gerrie und Bojan! Arbeitete eine Belohnung. –

+8

Als kurze Anmerkung ist diese Technik jetzt veraltet. Verwenden Sie 'container.Register (Component.For () .Instance (myT));' stattdessen. – eouw0o83hf

+0

Dieser Link ist jetzt auch tot – Liam

2

Sie können das tun durch die Kernel Eigenschaft des Behälters:

container.Kernel.AddComponentInstance<IMyInterface>(serviceObj); 
Verwandte Themen