2010-07-21 76 views
2

我想使用StructureMap在運行時掃描包含Registry類實現的程序集,但我遇到了問題。StructureMap 2.6.1.0程序集掃描問題

如果一個DLL包含一個註冊表類,但也包含一個對運行時不存在的dll的引用(比如運行時不需要的Rhino.Mocks dll),那麼StructureMap將拋出一個StructureMapConfiguration異常從Assembly.GetExportedTypes()調用。

有沒有辦法在StructureMap中避免這種行爲?

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

回答

1

通過反射器我發現與呼叫到graph.Log.AssertFailures(),其可裝配在掃描期間已發生(包括被assembly.GetExportedTypes期間拋出其是那些的那些()的任何異常你指的是)作爲一個巨大的例外被拋出。我還沒有發現任何事情表明這種行爲可以以某種方式關閉。我發現的是,如果你發現異常,掃描實際上會成功地處理它所掃描的任何程序集。除非繼續到下一個程序集,否則在調用GetExportedTypes()(這是一個框架方法)時,StructureMap實際上無法執行有關引發異常的任何操作。如果你不介意'丟失'一些程序集,只是捕捉異常並繼續前進。

公共無效配置(操作配置) { 鎖(本) { ConfigurationExpression表達式=新ConfigurationExpression(); configure(表達式); PluginGraph graph = expression.BuildGraph(); graph.Log.AssertFailures(); this._interceptorLibrary.ImportFrom(graph.InterceptorLibrary); this._pipelineGraph.ImportFrom(graph); } }