Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StructureMap-根据需要插入依赖项_C#_Dependency Injection_Structuremap - Fatal编程技术网

C# StructureMap-根据需要插入依赖项

C# StructureMap-根据需要插入依赖项,c#,dependency-injection,structuremap,C#,Dependency Injection,Structuremap,我试图使我的异常处理依赖于上下文。我有一个工厂类构造ExceptionHandler。处理程序应该由最后抛出的异常类型构造。以经典的方式配置structuremap,效果很好。试图使用条件构造,我的代码失败了,我不明白为什么?! 我错过了什么?我的主要错误在哪里 问候,, -一月 工作代码: ObjectFactory.Initialize(x => x.ForRequestedType<IExceptionHandler>() .TheDefault

我试图使我的异常处理依赖于上下文。我有一个工厂类构造ExceptionHandler。处理程序应该由最后抛出的异常类型构造。以经典的方式配置structuremap,效果很好。试图使用条件构造,我的代码失败了,我不明白为什么?! 我错过了什么?我的主要错误在哪里

问候,, -一月

工作代码:

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

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

IEExceptionHandler=ObjectFactory.With(exception).GetInstance();

嗨,谢谢你,约书亚,这让我更清楚了。现在我有个错误。可能它与构造函数有关,因此我将更具体地介绍所涉及的类。谢谢-简
ObjectFactory.Initialize(x =>
    x.ForRequestedType<IExceptionHandler>().TheDefault.Is.Conditional(o =>
        o.TheDefault.Is.OfConcreteType(MyExceptionHandler)));
IExceptionHandler handler = ObjectFactory.With("exception").EqualTo(exception).GetInstance<IExceptionHandler>();
public class MyException : System.Exception
{
    public MyException()
    {...}
    ...
}

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

public class MyExceptionHandler : BaseExceptionHandler
{
    public MyExceptionHandler(MyException exception) : base(exception)
    {...}
    ...
}
IExceptionHandler handler = ObjectFactory.With<Exception>(exception).GetInstance<IExceptionHandler>();