2010-11-29 8 views
2

Was ich versuche zu tun, ist eine Komponente in meine MVC-App injizieren und nutzen Sie es von den Controllern.MEF und MVC - ein paar Hinweise bitte :)

Derzeit versuche ich nicht, MEF für die tatsächlichen Controller zu verwenden, aber ich möchte Komponenten z. Eine Loggin-Komponente in der MVC-App.

Wo ist der beste Ort dafür?

Momentan habe ich, direkt in der Steuerung, meine Compose Teile Code und ILogger Eigenschaft, aber ich habe das Gefühl, das ist nicht der beste Weg. Scheint so, als müsste ich Compose nur einmal in der Anwendung aufrufen. Also sollte es in der globalen Asax-Datei sein, die ich komponiere? Wenn ja, wie komme ich an ILogger von meinen Controllern aus? Sollte ich einen "Basis" Controller haben, wo ich ILogger in den Konstruktor einfüge und von jedem Standard Controller erwerbe?

Hoffe, dass das Sinn macht - ich habe nur ein bisschen mit der Struktur meines Codes zu kämpfen.

Thx

+0

http://www.fidelitydesign.net/?p=259 Dieser Blogbeitrag könnte Ihnen helfen. Es geht um MVC3 und MEF. – Buildstarted

+0

danke ... in der Tat, sehr hilfreich. – SteveCl

+0

auch nicht über diese http://www.fidelitydesign.net/?p=88 – Kuncevic

Antwort

0

I verwenden Log4Net und des Loggers in jedem Controller injizieren. Ich denke nicht, dass es ein großer Erfolg ist, wenn Sie die Injektion verwenden. Sieh dir Ninject an. Es hat sowohl eine MVC-Implementierung als auch ein Protokollierungsmodul. Die Module werden einmal in den globalen geladen, dann injiziert es die Controller. Basic DI, aber brauchst du wirklich mehr? Wenn Sie einen Basis-Controller erstellen, müssen Sie in jedem Controller, der injiziert werden kann, noch einen Ctor erstellen.

Sie könnten einen Basis-Controller mit der Protokollierung erstellen und dann Property-Injection verwenden. Ich habe das nie getan, aber wenn alle Controller die gleiche Basis verwenden, sollte es gut funktionieren.

+0

Für den Logger verwende ich eine statische Kapselung von log4net. Macht es wirklich einfach alles zu loggen. Und Sie riskieren nicht, dass mehr Protokollierer versuchen, auf dieselben Ressourcen zuzugreifen. –

+0

Ich benutze NLog ... nicht, dass es wirklich einen großen Unterschied macht. Ich fange an zu denken, dass Ninject oder Windsor eine bessere Lösung als MEF sein könnte für das, was ich tun möchte! @Paw ... erstellen Sie Ihre statische Kapselung im global.asax? – SteveCl