2009-10-27 47 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 –