Heim > Backend-Entwicklung > C++ > Sollte ich Abhängigkeiten in Attribute einfügen?

Sollte ich Abhängigkeiten in Attribute einfügen?

DDD
Freigeben: 2025-01-15 08:24:44
Original
572 Leute haben es durchsucht

Should I Inject Dependencies into Attributes?

Property Dependency Injection: Nicht empfohlen

Property-Injection sollte aufgrund von Einschränkungen von CLR und Frameworks wie MVC und Web API generell vermieden werden.

Frage

In Ihrem Code ist das Einfügen von IPermissionService in AuthorizeAttribute über die Eigenschaftsinjektion problematisch, da permissionService zur Laufzeit null ist.

Lösung

Bitte beachten Sie Folgendes:

Option 1: Daten und Verhalten trennen

  • Logik aus Attributen in einen Dienst extrahieren
  • Registrieren Sie den Dienst im Container
  • Verwenden Sie Attribute, um die Methode des Dienstes zu analysieren und aufzurufen

Option 2: Bescheidene Objekte verwenden

  • Verschieben Sie die gesamte Logik in Eigenschaften in benutzerdefinierte Dienste
  • Registrieren Sie den Dienst im Container
  • Lassen Sie die AuthorizeCore-Methode der Eigenschaft den Dienst auflösen und ihre Methode aufrufen

Welche Option soll ich wählen?

  • Option 1: Zur Vereinfachung des Designs, mehrerer Eigenschaften oder der Definition von Eigenschaften in einer von MVC unabhängigen Baugruppe.
  • Option 2: In anderen Fällen ein pragmatischerer Ansatz.

Das obige ist der detaillierte Inhalt vonSollte ich Abhängigkeiten in Attribute einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage