StructureMap 2.6.1.0 Проблема сканирования сборки - PullRequest
2 голосов
/ 21 июля 2010

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

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

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

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

1 Ответ

1 голос
/ 27 ноября 2011

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

public void Configure (Action configure) {lock (this) {ConfigurationExpression expression = new ConfigurationExpression ();настроить (выражение);PluginGraph graph = expression.BuildGraph (); graph.Log.AssertFailures (); this._interceptorLibrary.ImportFrom (graph.InterceptorLibrary);this._pipelineGraph.ImportFrom (график);}}

...