StructureMap - 根据需求插入依赖关系

时间:2009-10-27 16:06:59

标签: c# dependency-injection 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,继承自Base的MyExceptionHandler和继承自System.Exception的MyException。现在,如果我尝试获取我的处理程序,我会收到错误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)
    {...}
    ...
}

1 个答案:

答案 0 :(得分:2)

您的问题与条件注册无关。它与您传递异常的方式有关。 .With(string parameterName)语法只能与基本类型(string,int等)一起使用。对于异常,您需要With(T实例)语法:

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