2009-04-15 4 views

Antwort

4

Sie können dies nicht einfach mit Konstruktorinjektion tun. Die NHibernate-Interna müssen möglicherweise ein Proxy-Objekt erstellen, das von Ihrer Domain-Klasse mit Lazy-Ladecode usw. gestreut wurde. Daher gibt es, soweit ich weiß, keine einfache Möglichkeit, die Konstruktion Ihres Objekts zu überschreiben.

Sie können bekommen Abhängigkeit Injektion mit NHibernate ziemlich leicht, obwohl, indem Sie einen Interzeptor schreiben, der das Objekt für Sie über Property Setter-Injektion aufbauen wird. Es gibt ein Beispiel dafür here. In diesem Beispiel wird Windsor als DI-Container verwendet, aber Sie können dasselbe mit Structuremap natürlich tun - here are the relevant docs for StructureMap - suchen Sie nach dem Abschnitt "Setter-Injektion auf ein vorhandenes Objekt anwenden (BuildUp)".

Vorbehalt: Das Injizieren von Abhängigkeiten in Ihr Domänenmodell wird oft als Symptom eines Designproblems angesehen, und viele Menschen vermeiden dies, also stellen Sie sicher, dass dies wirklich der Fall ist, bevor Sie mit der Programmierung beginnen!

+0

Konstruktor Injektion ist möglich – Paco

+0

Ich habe nicht gesagt, dass es nicht möglich war Ich sagte, es war nicht einfach. Wenn ich falsch liege, bitte erleuchte mich :) –

+0

Dann lese ich nicht gut. Es tut uns leid. – Paco

1

Sie können Setterintion durchführen, indem Sie IInterceptor implementieren und die Injektion in der Onload-Methode mit Objectfactory.BuildUp durchführen. Dies ist einfach zu implementieren, Setter-Injektion ist möglicherweise nicht das, was Sie wollen.

Sie können die Konstruktorinjektion durchführen, indem Sie Ihren eigenen IBytecodeProvider und ReflectionOptimizer implementieren. Das ist etwas schwieriger, aber es ist möglich!

Ich empfehle nicht, Dinge in Einheiten zu injizieren. In 99,9% der Fälle wird dies zu schlechtem Design führen und das Layering in Ihrem Design unmöglich machen. Vielleicht sehen Sie sich den 0,01% der Fälle gegenüber, in denen es richtig ist. Es ist etwas, was Sie tun, wenn Sie goto-Anweisungen eingeben.

2

Werfen Sie einen Blick auf this post from Fabio Maulo (aktuelle NHibernate Lead Dev), er löste dies vor einigen Monaten. Der Code ist für NHibernate 2.1, aber ich denke, dass es nach 2.0.1GA zurückportiert werden könnte, indem Sie die IProxyFactoryFactory-Teile entfernen.

Verwandte Themen