Domanda

Sto cercando di fare in modo che la mia gestione delle eccezioni dipenda dal contesto. Ho una classe di fabbrica che costruisce gestori di eccezioni. il gestore deve essere costruito dall'ultimo tipo di eccezione generato. configurando la struttura in modo classico, funziona benissimo. cercando di usare la costruzione condizionale, il mio codice fallisce e non riesco a capire perché ?! Cosa mi sto perdendo? Dov'è il mio errore principale?

saluti,  -Jan

Codice di lavoro:

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

Codice non funzionante

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

Ottenere un'istanza:

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

Quindi proverò ad essere più specifico:

Ho un BaseExceptionHandler, MyExceptionHandler che eredita da Base e MyException che eredita da System.Exception. In questo momento, se provo a ottenere il mio gestore, viene visualizzato l'errore 202: Nessuna istanza predefinita definita per PluginFamily MyException ...
Le lezioni sembrano mostrate sotto ...

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

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

public class MyExceptionHandler : BaseExceptionHandler
{
    public MyExceptionHandler(MyException exception) : base(exception)
    {...}
    ...
}
È stato utile?

Soluzione

Il tuo problema non ha nulla a che fare con la registrazione condizionale. Ha a che fare con il modo in cui si passa l'eccezione. La sintassi .With (string parameterName) deve essere utilizzata solo con tipi primitivi (string, int, ecc.). Per un'eccezione, si desidera la sintassi With (istanza T):

IExceptionHandler handler = ObjectFactory.With<Exception>(exception).GetInstance<IExceptionHandler>();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top