1

Ich habe eine asp.net-mvc-Site und ich verwende Unity, um Dependency-Injection und alle meine Abhängigkeiten in Controller oder Modellklassen innerhalb des Konstruktors der Klasse geschehen.Bei Verwendung der Abhängigkeitsinjektion in asp.net-mvc, was ist der beste Weg, um nur einzelne Aktion Abhängigkeiten zu behandeln?

Mein ein Problem ist jetzt, dass eine Klasse ist teuer zu instanziieren und es wird nur in einer einzigen Aktion in meinem Controller verwendet und ich möchte es nicht in den Konstruktor übergeben, um bei jeder anderen Aktion, die aufgerufen wird instanziiert werden auf diesem Controller. Alle Beispiele, die ich im Internet sehe, haben dependencies being injected into the controller like this.

Was ist der richtige Weg, um mit dieser Situation umzugehen, wo ich nur eine Abhängigkeit für eine einzelne Aktion benötigen. Im Moment mache ich nur das "neue" in meiner Konstruktorklasse, was ich vermeiden möchte (da ich die Abhängigkeitsimplementierung nicht abstrahiert und entkoppelt habe), aber zumindest weiß ich, dass es bei keiner anderen Aktion ein Performance-Hit sein wird .

Antwort

1

Die Erstellung Ihrer Anwendungskomponenten sollte fast and their constructors should be simple sein. Jede schwere Initialisierung sollte verschoben werden.

Wenn dies aufgrund des vorhandenen Legacy-Codes nicht möglich ist, sollten Sie die Komponente hinter einer Proxy-Implementierung für die gleiche Schnittstelle einbinden. Zum Beispiel:

public class LazyServiceProxy : IService 
{ 
    private readonly Lazy<IService> service; 
    public LazyServiceProxy(Lazy<IService> service) { 
     this.service = service; 
    } 

    void IService.Method(object param1) => this.service.Value.Method(param1); 
} 

Beachten Sie auch, dass die Tatsache, dass Ihre Abhängigkeit nur in einer einzigen Aktion ist ein Indiz für geringe Kohäsion zwischen den Aktionsmethoden des Controllers verwendet wird. Niedrige Kohäsion ist ein Zeichen für eine Single Responsibility Principle (SRP) Verletzung. Die SRP schreibt vor, dass jede Klasse eine einzige Verantwortlichkeit haben sollte, daher könnte es gut sein, die Aktion und ihre Abhängigkeit auf ihren eigenen Controller zu verschieben. Während es üblich ist, Aktionen auf der Grundlage ihres gemeinsamen URL-Präfixes zu gruppieren (z. B. /customers/action), können Sie mit MVC Aktionen vollständig in mehrere Controller unter Beibehaltung ihrer ursprünglichen URL aufteilen.

+0

Danke Steven. Ich stimme Ihren obigen Punkten zu. In Bezug auf "MVC ermöglicht es Ihnen vollständig, Aktionen in mehrere Controller zu teilen, während sie ihre ursprüngliche URL beibehalten." Sprechen Sie über Weiterleitungen? – leora

Verwandte Themen