2009-06-23 4 views
0

Ich habe einen UnityContainer, der seine Konfigurationsinformationen zur Laufzeit in der global.asax-Datei einer MVC-Webanwendung abruft.Best Practice - Share UnityContainer über Tiers in Asp.net MVC?

Ich habe auch Dienste in einer anderen Assembly, die Zugriff auf diesen Container benötigen, damit sie Auflösungen manuell ausführen können.

Wie kann ich die beiden am besten teilen? Ich möchte keinen Verweis zwischen meiner Data-Assembly und MVC haben, aber ich möchte, dass die Data Assembly Zugriff auf den UnityContainer hat, der von der Web-App konfiguriert wurde.

Ich frage mich, was andere in dieser Situation tun.

Antwort

0

Ich verwende StructureMap (ähnliches Tool) und teile meine Konfiguration generell projektübergreifend in einer Lösung. Dies bedeutet, dass sie sich nicht direkt dasselbe Objekt teilen, wenn sie nicht im selben Kontext arbeiten. In einer einfachen Anwendung, in der die Website die Assembly lädt, um Arbeit vom Controller zur Business-Schicht und dann zum dal auszuführen, verwenden sie tatsächlich das gleiche Objekt. Aber sobald Sie Ihre Tiers in physisch getrennte Schichten (Hardware) setzen müssen, kann die Config damit gehen. Dies wird zu diesem Zeitpunkt zu einem Bereitstellungsproblem.

+0

richtig, aber es gibt keine Konfig. Ich hatte eine Lösung, die funktionierte, wenn ich Config-Dateien verwendete, aber nachdem ich einmal zu oft durch große Refactorings, Bit-XML-Hell und verwende ich C#, um den Container verdrahten. Wo ich Config geteilt habe, brauche ich jetzt einen anderen Ansatz. –

1

Ich habe gerade den Container in sich selbst registriert, und dann lassen Sie die Abhängigkeiten Kaskade innerhalb der referenzierten Tiers.

dh

// configure Behälter

bla bla bla

// registrieren sich

Container.RegisterInstance (Container);

Dann jeder, der es braucht, hat es nur als abhängige Eigenschaft oder Konstruktor param.