2010-07-21 2 views
2

Я пытаюсь использовать StructureMap для сканирования во время выполнения для сборок, которые содержат реализацию класса Registry, но у меня возникает проблема.StructureMap 2.6.1.0 Ошибка сборочного сканирования

Если dll содержит класс реестра, но также содержит ссылку на DLL, которая отсутствует во время выполнения (скажем, DLL Rhino.Mocks, которая не требуется во время выполнения), StructureMap будет вызывать исключение StructureMapConfiguration из вызова Assembly.GetExportedTypes().

Есть ли способ избежать этого поведения в StructureMap?

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

ответ

1

Через отражатель я обнаружил, что с вызовом graph.Log.AssertFailures() какие-либо исключения, которые могли произойти во время сканирования сборки (который включает в себя те, которые выбрасываются во время assembly.GetExportedTypes(), которые являются те, о котором вы говорите) выбрасываются как одно большое исключение. Я не нашел ничего, что указывало бы на то, что такое поведение можно как-то отключить. Однако я выяснил, что если вы поймаете исключение, сканирование действительно удастся с любыми сборками, которые ему удалось отсканировать. StructureMap не может фактически ничего делать, если исключения вызываются при вызове GetExportedTypes() (который является структурным методом), за исключением перехода к следующей сборке. Если вы не возражаете «потерять» некоторые сборки, просто поймайте исключение и продолжайте движение.

общественные недействительная Настройка (Действие конфигурирование) { замок (это) { ConfigurationExpression выражения = новый ConfigurationExpression(); configure (выражение); Графа PluginGraph = выражение.BuildGraph(); graph.Log.AssertFailures(); this._interceptorLibrary.ImportFrom (graph.InterceptorLibrary); this._pipelineGraph.ImportFrom (graph); } }

Смежные вопросы