Pergunta

eu estou tentando fazer o meu dependend ExceptionHandling do contexto. Eu tenho uma classe de fábrica construção exceptionhandlers. o manipulador deve ser construído pelo último tipo de exceção lançada. configurando StructureMap a maneira clássica, ele funciona bem. tentando usar Construindo condicional, o meu código de falha e eu não posso ver o porquê ?! O que estou perdendo? Onde está o meu grande erro?

Atenciosamente, -Jan

código de trabalho:

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

código não-trabalho

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

Obtendo uma instância:

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

Então, eu vou tentar ser mais específico:

Eu tenho um BaseExceptionHandler, MyExceptionHandler herdando de Base e MyException herdando de System.Exception. Agora, se eu tentar obter o meu manipulador eu recebo um erro 202: Não Padrão Instância definido para PluginFamily MyException ...
As classes olhar como mostrado abaixo ...

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

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

public class MyExceptionHandler : BaseExceptionHandler
{
    public MyExceptionHandler(MyException exception) : base(exception)
    {...}
    ...
}
Foi útil?

Solução

Seu problema não tem nada a ver com o registro condicional. Tem a ver com a maneira como você está passando a exceção. A (cadeia parameterName) .Com sintaxe só deve ser usado com os tipos de primitivas (String, int, etc). Para uma exceção, você quer a sintaxe Com (exemplo T):

IExceptionHandler handler = ObjectFactory.With<Exception>(exception).GetInstance<IExceptionHandler>();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top