我想創建一些現有的代碼模塊(IMyDesiredType
)加載MEF。模塊主要有一些我想提供給MEF的構造函數參數(ImportingConstructor
)。到目前爲止,這工作正常。忽略構造函數異常與MEF沒有Visual Studio打破例外
現在出現了這個問題,因爲有時候主機應用程序中的依賴關係不可用(它們爲空)。這些模塊將按照慣例拋出ArgumentNullException
,我不想改變這一點。不過,我希望MEF忽略這些對象(不包括它們在對象圖中)。
[Export(typeof(IMyDesiredType))]
class MyModule : IMyDesiredType{
[ImportingConstructor]
public MyModule(object aNecessaryDependency){
if(aNecessaryDependency==null) throw new ArgumentNullException(nameof(aNecessaryDependency))
}
}
爲了獲得這個,我讓MEF創建Lazy<IMyDesiredType>
實例和一個初始化它們之一。
foreach(var myLazy in collectionOfMefExports){
try{
myLazy.Value // do something with the value, so the object gets composed
}catch(CompositionException){
// Here I get the ArgumentNullException wrapped in a CompositionException
// and also can work around it. However because of the exception handling
// is on the first hand in MEF, VS will break always in the throwing
// constructor of the module
continue; // Go to the next module after logging etc.
}
}
這裏的問題是,我要趕CompositionException
,而不是直接從Exception
模塊的構造(主要是ArgumentNullException
)。因此,由於Exception不是從用戶代碼捕獲的,所以Visual-Studio在每個模塊上都會中斷。明顯的解決辦法是,告訴視覺工作室不要打破ArgumentNullException
-types,但這對我來說感覺非常「黑客」。而在其他任何地方,我都希望VS在ArgumentNullException
之間突破。
是否有另一種模式,我可以讓MEF不向圖中添加組件,其中聲明瞭依賴關係([Export]
),但它的值爲null,或者是否存在我可以覆蓋的MEF類的方法在派生類中,並抓住構造函數的例外呢?
請留下評論,如果問題不明確,我不是英語母語的人,因此也許這個問題是言辭混亂的。
您是否已經試過'[DebuggerHidden]'和[DebuggerStepThrough]屬性作爲答案? http://stackoverflow.com/questions/1420390/dont-stop-debugger-at-that-exception-when-its-thrown-and-caught#3455100 – grek40
非常感謝您的建議。可悲的是,它的工作方式是:我必須裝飾導出模塊的每個構造函數,但是它們不會在所有運行時環境中拋出這些異常,而且不僅僅是通過MEF將它們用作簡單插件的異常。 – HCL
是防止「Visual-Studio在每個模塊上出現故障......」的問題? – Julian