Navigation and service panel


Content

This text is fallbacked from the German Version. If you need use Google Translate


Umschalten der Lifetime des OrderManagers bei einem Multisite Environment

By Tobias Studer on 21. June 2013, No comments

Die Standardkonfiguration des OrderManagers für bei einem Multisite Environment zu Problemen im Content Editor. Dieser Blogpost beschreibt die Lifetime Manager von Unity und eine Lösung für die Multisite Problematik.

Der Unity Container managt das Erstellen und Auflösen von Objekten basierend auf der Lifetime, die man für einen registrierten Typ konfiguriert und benutzt die Standard Lifetime, falls keine spezifiziert ist.

Registriert man einen Typen über die Konfiguration, dann ist das Standardverhalten, den Transient Lifetime Manager zu verwenden. Dieser erstellt eine neue Instanz eines registrierten und angefragten Typs bei jedem Aufruf der Resolve oder ResolveAll Methode oder wenn der Dependency Mechanismus Instanzen in andere Klassen injiziert. Der Unity Container speichert keine Referenzen des Objekts. Wenn man andererseits ein "nontransient" Verhalten (wie einen Singleton) für Objekte die der Container erstellt will, dann muss dieser Referenzen zu diesen Objekten speichern. Er muss auch das Management der Lifetime für diese Objekte übernehmen. Unity benutzt dazu Klassen, die von der LifetimeManager Basisklasse erben.

Unity Built-In Lifetime Managers

Unity bringt sechs Lifetime Manager mit, die man direkt verwenden kann. Es gibt aber auch die Möglichkeit, eigene zu implementieren. Folgende sind in Unity bereits vorhanden:

  • TransientLifetimeManager
  • ContainerControlledLifetimeManager
  • HierarchicalLifetimeManager
  • PerResolveLifetimeManager
  • PerThreadLifetimeManager
  • ExternallyControlledLifetimeManager

Genauere Beschreibungen zu den einzelnen Lifetime Manager findet man hier und hier.

Problematik der Standardkonfiguration für ein Multisite Environment

Bei der Konfiguration, die SES mitbringt, wird für den OrderManager der PerThreadLifetimeManager verwendet. Dies führt dazu, dass der OrderManager innerhalb einer <site> nur einmal geladen wird und dann für alle weiteren Aufrufe derselbe ist. Im Content Editor sind wir immer in derselben <site> und haben somit immer den gleichen OrderManager. Dies führt zu einem falschen Verhalten, wenn wir die Übersichten der einzelnen <sites> betrachten. Das falsche Verhalten kann durch das Verwenden des TransientLifetimeMangers behoben werden.

Categories  E-Commerce  Configuration  Troubleshooting Tags  SES  Unity

No comments

Add your comment

Your email address will not be published. Required fields are marked *

*