Ninject und statische Klassen - wie?

8

Ich habe eine statische Klasse und ich muss einige Instanzen einfügen. Eine statische Klasse kann einen statischen Konstruktor haben, aber sie muss parameterlos sein. Also, wie soll ich etwas einbringen?

Ich möchte kein Singleton erstellen. Ich möchte eine statische Klasse haben, und eine ihrer Methoden arbeitet an einer Instanz, die injiziert werden soll. Balg ist ein Beispiel dafür, was ich brauche.

%Vor%

Hintergrundinfo: Dies ist eine MVC4-Anwendung, also verwende ich das ninject.mvc3-Plugin.

PS: Ich habe einige Fragen bezüglich Ninject und statischen Methoden gesehen, aber keine davon schien ein Problem wie dieses anzugehen.

Vielen Dank im Voraus.

    
Phillippe Santana 31.05.2013, 23:46
quelle

2 Antworten

16

Tu es nicht. Verwenden Sie keine statische Klasse, die Abhängigkeiten benötigt. Das macht Tests schwieriger und andere Typen, die von diesem AuthenticationHelper abhängen, können es nicht in ihren Konstruktor aufnehmen, was bedeutet, dass sie die Tatsache verbergen, dass sie davon abhängen.

Machen Sie stattdessen einfach das, was Sie immer tun würden: machen Sie AuthenticationHelper nicht statisch, implementieren Sie eine IAuthenticationHelper -Schnittstelle und injizieren Sie alle Abhängigkeiten über ihren öffentlichen Konstruktor.

Wenn Sie jedoch darauf bestehen, diese Klasse statisch zu halten (was wiederum eine sehr schlechte Idee ist), erstellen Sie eine statische Initialize(UserBusiness userBusiness) -Methode und rufen Sie diese Methode im Startpfad Ihrer Anwendung auf. Sie können nicht zulassen, dass Ihr DI-Container diese statische Methode aufruft. Sie erlauben es nicht, weil 1. es eine schlechte Idee ist, und 2. eine solche statische Methode nur einmal aufgerufen werden muss, also hilft es nicht wirklich, wenn Sie Ihren Container automatisch für Sie verdrahten.

    
Steven 01.06.2013, 00:11
quelle
1

Als Nebenbemerkung ist die Sperre völlig nutzlos, da Sie den Zugriff auf eine lokale Variable "user" sperren, die nicht zwischen den 2 Zeilen "if (user == null)" wechselt.

Sie möchten den Zugriff auf das Context.Session [CURRENT_USER] -Element sperren, also ..

%Vor%     
steve 04.03.2014 13:32
quelle

Tags und Links