Im Moment habe ich eine benutzerdefinierte ControllerFactory, in die ich meinen Unity-Container injiziere:
in global.asax Application_Start ():
%Vor%In der Controller Factory stelle ich meine Controller so ein, dass sie einen benutzerdefinierten ActionInvoker verwenden:
%Vor%Schließlich versuche ich in meinem benutzerdefinierten ActionInvoker Aktionen aufzubauen, die mit dem ActionInvokers-Container aufgerufen werden:
%Vor%Hier ist ein Beispiel für einen der ActionFilter, die aufgebaut werden:
%Vor%Das Problem besteht darin, dass die öffentliche Eigenschaft in meinem benutzerdefinierten ActionFilterAttribute nie mit etwas injiziert wird. Bei der Ausführung bleibt null! Ich kann nicht sehen, warum mein Filter nicht korrekt vom Container aufgebaut wird. Der Typ, der injiziert wird, wird wie folgt richtig registriert:
%Vor%Und wird auch an anderer Stelle in die Anwendung injiziert (zwar nicht über .Buildup). Dies ist ungefähr der gleiche Prozess, der von diesem Blogbeitrag . Welches Teil des Puzzles vermisse ich?
Ich würde das etwas anders machen. Ich würde:
Installieren Sie das Paket unity.mvc3 nuget
rufen Sie bootstrapped.initialise () auf, wie im txt-Dokument erwähnt, das das Paket zum Projekt
Definieren Sie Ihr IMetadataService-Mapping beim Initialisieren auf Ihren Concrete-Typ
Fügen Sie Ihrem Konstruktor IMetadataService hinzu
Der Unterschied zwischen Ihrer Implementierung und dem Artikel, auf den Sie verweisen, ist, dass Sie Func verwenden. Ich bin mir nicht sicher, ob das dem Mix hier ein anderes Problem hinzufügt. Ich muss mir vorstellen, dass es funktioniert, da die obige Methode (ohne Func) gut für mich funktioniert.
Bearbeiten: Brad Wilsons Code funktionierte für mich hier ganz gut: Ссылка
Anwendbare Teile (siehe oben stehenden Link)
Global.asax.cs
%Vor%Der Filter selbst:
%Vor%und UnityFilterAttributeFilterProvider.cs
%Vor%Tags und Links asp.net-mvc-3 c# dependency-injection unity-container