1

Enterprise Library Exception Handling Block を例外処理に使用したいと考えています。それを試すために、例外をスローして処理する簡単なアプリを作成しました。

のような BCL 例外を使用するとSystem.ApplicationException、スローされた例外は次のようにラップされます。

ポリシー:

<exceptionPolicies>
    <add name="DalPolicy">
        <exceptionTypes>
            <add name="DbPrimitiveHandledException" type="Exceptions.DbPrimitiveHandledException, Exceptions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                postHandlingAction="ThrowNewException">
                <exceptionHandlers>
                    <add name="DAL Wrap Handler" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WrapHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                        exceptionMessage="Dal Wrapper Exception" wrapExceptionType="System.ApplicationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                </exceptionHandlers>
            </add>
        </exceptionTypes>
    </add>
    ...
</exceptionPolicies>

コンソール出力:

System.ApplicationException: Dal ラッパー例外 ---> Exceptions.DbPrimitiveHandledException: Db 処理されたポリシングされた例外...

しかし、自分の例外を使用しようとすると:

public class DalWrapperException : Exception
{
    public DalWrapperException()
    { }

    public DalWrapperException(string message)
        : base(message)
    { }
}

ポリシー:

<exceptionPolicies>
    <add name="DalPolicy">
        <exceptionTypes>
            <add name="DbPrimitiveHandledException" type="Exceptions.DbPrimitiveHandledException, Exceptions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                postHandlingAction="ThrowNewException">
                <exceptionHandlers>
                    <add name="DAL Wrap Handler" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WrapHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                        exceptionMessage="Dal Wrapper Exception" wrapExceptionType="Exceptions.DalWrapperException, Exceptions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
                </exceptionHandlers>
            </add>
        </exceptionTypes>
    </add>
    ...
</exceptionPolicies>

ラッピングが機能しない - ExceptionHandlingException が発生する:

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionHandlingException: Unable to handle exception: 'WrapHandler'.

私の例外または構成の何が問題なのか誰か教えてもらえますか? 前もって感謝します

4

1 に答える 1

3

問題は例外クラスにありました。内部例外を受け入れるコンストラクターをもう 1 つ実装する必要があります。

public class DalWrapperException : Exception
{
    public DalWrapperException()
    { }

    public DalWrapperException(string message)
        : base(message)
    { }

    public DalWrapperException(string message, Exception innerException)
        : base(message, innerException)
    { }
}
于 2013-02-22T17:27:53.530 に答える