Abhängigkeitsinjektion für Handler und Filter in der ASP.NET-Web-API

8

Ich versuche, mein Web-API-Projekt zu verkabeln, um Castle Windsor für IoC zu verwenden

Ich habe das für meine Controller getan, indem ich diesen ausgezeichneten Artikel gelesen habe.

Ich versuche nun Abhängigkeiten in mein DelegatingHandler und ActionFilterAttribute

einzufügen

Ich habe versucht, die Techniken zu kopieren, die für Filter in regulären ASP.Net MVC verwendet werden, aber sie scheinen nicht in Web API zu gelten

Hat jemand es geschafft, dass das funktioniert?

Ich bin nicht sicher, was der relevante Erweiterungspunkt in der Web API ist

Ich habe gesehen, dass das vorgeschlagen wird

%Vor%

aber nicht sicher, ob es einen besseren Weg gibt. Ich würde es vorziehen, den Mechanismus anzuzapfen, der diese Handler / Filter erstellt.

Dies riecht nach Service Location für viele Handler. Gibt es einen einzigen Punkt, an dem alle Handler erstellt werden?

irgendwelche Ideen?

    
ChrisCa 24.10.2012, 16:42
quelle

2 Antworten

13

Da die Sammlung MessageHandlers global ist, handelt es sich effektiv um eine Liste von Singletons. Dies ist in Ordnung, wenn der Handler selbst keinen Status und keine Abhängigkeiten hat, aber in einem System, das auf den SOLID-Designprinzipien basiert, ist es sehr wahrscheinlich, dass diese Handler Abhängigkeiten haben und sehr wahrscheinlich, dass einige dieser Abhängigkeiten eine benötigen Lebensdauer, die kürzer ist als Singleton.

Wenn dies der Fall ist, sollte ein solcher Message-Handler nicht als Singleton erstellt werden, da eine Komponente im Allgemeinen nie eine Lebensdauer haben sollte, die länger ist als die Lebensdauer ihrer Abhängigkeiten.

Die Web-API verfügt jedoch über keine Hooks, die es ermöglichen, einen solchen Handler bei jeder Anfrage aufzulösen, aber ein solcher Mechanismus kann leicht mit einer Proxy-Klasse erstellt werden:

%Vor%

Dieser Proxy kann wie folgt verwendet werden:

%Vor%

Der Proxy ist ein Singleton, aber er löst den angegebenen MyCustomHandler bei jeder Anfrage auf.

    
Steven 20.10.2014 19:00
quelle
1

Es scheint heute keinen Erweiterungspunkt zu geben. Es gibt jedoch eine Anfrage dazu in Ссылка

    
Mattias Nordqvist 28.11.2012 09:29
quelle