2009-10-27 48 views
1

我試圖讓我異常處理上下文依賴。我有一個工廠類構造異常處理程序。處理程序應該由最後拋出的異常類型構造。以經典的方式配置結構圖,它工作得很好。試圖使用條件構建,我的代碼失敗,我不明白爲什麼?! 我錯過了什麼?我的主要錯誤在哪裏?StructureMap - 在需求插入依賴關係

問候, -JAN

工作代碼:

ObjectFactory.Initialize(x => 
    x.ForRequestedType<IExceptionHandler>() 
     .TheDefault.Is.OfConcreteType<MyExceptionHandler>()); 

非工作代碼

ObjectFactory.Initialize(x => 
    x.ForRequestedType<IExceptionHandler>().TheDefault.Is.Conditional(o => 
     o.TheDefault.Is.OfConcreteType(MyExceptionHandler))); 

獲取一個實例:

IExceptionHandler handler = ObjectFactory.With("exception").EqualTo(exception).GetInstance<IExceptionHandler>(); 

所以我會盡量做到更具體:

我有一個BaseExceptionHandler,MyExceptionHandler從Base繼承,MyException繼承System.Exception。現在,如果我嘗試讓我處理我得到一個錯誤202:用於PluginFamily MyException沒有定義默認實例...
的類看起來如下所示...

public class MyException : System.Exception 
{ 
    public MyException() 
    {...} 
    ... 
} 

public class BaseExceptionHandler 
{ 
    public BaseExceptionHandler(Exception exception) 
    {...} 
    ... 
} 

public class MyExceptionHandler : BaseExceptionHandler 
{ 
    public MyExceptionHandler(MyException exception) : base(exception) 
    {...} 
    ... 
} 

回答

2

您的問題無關有條件註冊。它與你傳遞異常的方式有關。 .With(string parameterName)語法只能用於原始類型(string,int等)。對於例外情況,您需要With(T實例)語法:

IExceptionHandler handler = ObjectFactory.With<Exception>(exception).GetInstance<IExceptionHandler>(); 
+0

嗨, 謝謝Joshua,這讓我對它更加清楚。 現在我得到一個錯誤202雖然。 可能它與構造函數有關,所以我會更詳細地介紹涉及的類。 謝謝 -jan –