2009-09-29 13 views
5

Ich habe gerade begonnen, StructureMap zu verwenden, nachdem ich zuvor mit Spring.Net gearbeitet habe. Ich liebe den DefaultConventionScanner und die Fähigkeit, Assemblys zu scannen und Konvention über Konfiguration zu verwenden, um Klassen zu finden. Es scheint jedoch eine Einschränkung zu geben, dass die Klassen, die die Schnittstellen implementieren, öffentlich sein müssen, während wir es bevorzugen, Schnittstellen öffentlich zu machen und unsere Implementierungen innerhalb einer Assembly zu halten.Can Strukturkarte DefaultConventionScanner nicht-öffentliche Klassen finden

Gibt es eine Möglichkeit, den DefaultConventionScanner auch nach internen Klassen zu fragen?

Antwort

9

Nein, und in der Tat gilt die Beschränkung, dass Klassen öffentlich sein sollten, für alle von StructureMap - nicht nur die Konventionsscanner. Sie können interne Typen manuell mit StructureMap registrieren, wenn Sie das InternalsVisibleTo-Attribut verwenden, aber es ist nicht gut unterstützt oder dokumentiert. Sie können keinen ITypeScanner (wie DefaultConventionScanner) erstellen, der interne Typen registriert, weil AssemblyScanner nur exportierte Typen verfügbar macht.

+0

Beachten Sie, dass diese Antwort mehrere Jahre alt ist ... ist das immer noch der Fall? –

+0

Ja, es ist immer noch so. "Hinter den Kulissen verwendet StructureMap die Assembly.GetExportedTypes() -Methode von der .Net-CLR, um Typen zu finden und ..." - http://structymap.github.io/registration/auto-registration-and-conventions/ –