2010-07-21 11 views
2

J'essaie d'utiliser StructureMap pour analyser au moment de l'exécution les assemblages contenant une implémentation de la classe Registry, mais je rencontre un problème. Si une DLL contient une classe Registry, mais contient également une référence à une DLL qui n'est pas présente à l'exécution (disons une DLL Rhino.Mocks non requise à l'exécution), StructureMap lève une exception StructureMapConfiguration résultant à partir d'un appel Assembly.GetExportedTypes().StructureMap 2.6.1.0 Problème d'analyse d'assemblage

Est-il possible d'éviter ce comportement dans StructureMap?

ObjectFactory.Initialize(x => 
{ 
    x.Scan(s => 
    { 
     s.AssembliesFromApplicationBaseDirectory(); 
     s.LookForRegistries(); 
    }); 
}); 

Répondre

1

Grâce à réflecteur i trouvé que, avec l'appel à graph.Log.AssertFailures() des exceptions qui ont pu se produire pendant le balayage de l'ensemble (qui comprend ceux qui sont projetés au cours de assembly.GetExportedTypes() qui sont celles dont vous parlez) sont jetés comme une grande exception. Je n'ai rien trouvé indiquant que ce comportement peut être désactivé. Ce que j'ai découvert cependant, c'est que si vous attrapez l'exception, l'analyse réussit avec les assemblages qu'elle a réussi à analyser. StructureMap ne peut pas réellement faire quoi que ce soit à propos des exceptions levées lors de l'appel de GetExportedTypes() (qui est une méthode de framework) sauf continuer à l'assembly suivant. Si cela ne vous dérange pas de 'perdre' certains assemblys, attrapez simplement l'exception et passez à autre chose.

publique vide Configurer (Configurer Action) { lock (this) { expression ConfigurationExpression = new ConfigurationExpression(); configure (expression); PluginGraph graph = expression.BuildGraph(); graph.Log.AssertFailures(); this._interceptorLibrary.ImportFrom (graph.InterceptorLibrary); this._pipelineGraph.ImportFrom (graphique); } }