Den aktuellen TinyIoc-Container in einem Nancy-Projekt abrufen

8

Ich baue ein kleines Nancy-Webprojekt.

In einer Methode einer meiner Klassen (kein Modul nancy) möchte ich grundsätzlich tun:

%Vor%

Es gibt jedoch nur eine Registrierung in .Current (nicht öffentliche Mitglieder, _RegisteredTypes), die lautet:
TinyIoC.TinyIoCContainer.TypeRegistration

Natürlich, in meinem obigen Code, bekomme ich:

  

Der Typ konnte nicht aufgelöst werden: My.Namespace.IMyThing

Also, ich schätze, ich bekomme nicht den gleichen Container in meinem Bootstrapper registriert?

Gibt es einen Weg, um daran zu kommen?

BEARBEITEN

Um ein bisschen mehr von dem, was ich versuche, zu konkretisieren:

Grundsätzlich sieht meine URL-Struktur ungefähr so ​​aus:

  

/ {meinTyp} / {myMethod}

Also würde die Idee, zu: / customer / ShowAllWithTheNameAlex zu gehen, den Dienst Customer laden und die Methode showAllWithTheNameAlex

ausführen

Wie ich das mache ist

%Vor%

Ich habe dann eine abstrakte Basisklasse mit einer Methode GetService, die den Service zurückgibt.
Hier versuche ich TinyIoC.TinyIoCContainer.Current.Resolve ();
zu verwenden In diesem Fall wäre es TinyIoC.TinyIoCContainer.Current.Resolve ("typeName");

%Vor%

Hier ist meine Implementierung des Dienstes.

%Vor%

Schließlich habe ich mein Nancy-Modul, das wie folgt aussieht:

%Vor%     
Alex 26.09.2012, 16:23
quelle

3 Antworten

4

@alexjamesbrown - Die kurze Antwort ist, Sie nicht. Nancy wurde speziell so entworfen, dass Sie nicht direkt mit dem Container umgehen. Sie erwähnen, dass die Klasse, für die Sie eine Abhängigkeit von IMyThing benötigen, kein NancyModule ist. Nun, das ist kein Problem, solange eines Ihrer Module einen Verweis darauf hat, dann können diese Abhängigkeiten auch ihre eigenen Abhängigkeiten haben, die zur Laufzeit erfüllt werden.

%Vor%

Das obige funktioniert gut und Greeter hat seine Abhängigkeit von IGreetingMessageService zur Laufzeit

    
TheCodeJunkie 26.09.2012, 18:11
quelle
0

Ich hatte ein sehr ähnliches Problem, da ich den Container "teilen" musste. Der Grund dafür ist, dass mein Programm als ein Dienst ausgeführt wird, der Nancy-Self-Hosting verwendet, um eine REST-API bereitzustellen. Meine Module haben Abhängigkeiten, die von Nancy selbst injiziert werden, aber die anderen Teile der App, die nicht von Modulen referenziert werden, benötigen ebenfalls Abhängigkeiten. Mehrere Container sind hier keine sinnvolle Option (oder irgendwo wirklich), ich muss den Container zwischen Nancy und dem Rest der App teilen.

Ich habe einfach folgendes getan (Ich benutze Autofac, aber ich vermute, dass TinyIoC in ähnlicher Weise)

%Vor%

Dann kann ich in meinem Hauptcode den Container selbst benutzen

%Vor%

Da mein NancyHost im Service ist, wird der Container (einmal) nach seiner ersten Verwendung in main erstellt, diese statische wird dann verwendet, wenn Nancy dazu kommt, die Bootstrapper selbst zu erstellen.

In einer idealen Welt würde ich nicht wirklich einen global zugänglichen Container wollen, normalerweise wäre es lokal für die Funktion main .

    
Taoist 28.06.2017 15:22
quelle
-1

In diesem speziellen Fall ist "nicht direkt mit dem Container zu tun" sehr problematisch:

öffentliche Schnittstelle IFoo {}

öffentliche Klasse Foo: IFoo {public Foo (String-Leiste) {}}

Angenommen, IFoo ist bereits eine Konstruktorabhängigkeit eines Nancy-Moduls.

Beachten Sie die Zeichenkettenabhängigkeit des Foo-Konstruktors. Ich muss mit dem Container kommunizieren, um diesen Konstruktor für ein IFoo-Singleton zu verwenden, wenn er als Nancy-Modul-Abhängigkeit auftritt. Ich muss das auf der TinyIoC-Instanz registrieren, die NancyFx verwendet, und den tatsächlichen Wert von bar übergeben.

    
Rick O'Shea 31.08.2016 04:33
quelle