Как я могу внедрить объект в реализацию WCF IErrorHandler с помощью Castle Windsor? - PullRequest
4 голосов
/ 21 октября 2009

Я разрабатываю набор сервисов с использованием WCF. Приложение выполняет внедрение зависимостей с помощью Castle Windsor. Я добавил IErrorHandler реализацию, которая добавляется к сервисам через атрибут. Пока все работает. Объект IErrorHandler (класса FaultHandler применяется правильно и вызывается.

Теперь я добавляю логирование. Замок Виндзор настроен для внедрения объекта регистратора (экземпляр IOurLogger). Это работает. Но когда я пытаюсь добавить его к FaultHandler, мой регистратор становится пустым.

Код для FaultHandler выглядит примерно так:

class FaultHandler : IErrorHandler
{
    public IOurLogger logger { get; set; }

    public bool HandleError(Exception error)
    {
        logger.Write("Exception type {0}. Message: {1}", error.GetType(), error.Message);

        // Let WCF handle things its way. We only want to log.
        return false;
    }

    public void ProvideFault(Exception error, MessageVersion version, Message fault)
    {
    }
}

Это вызывает его собственное исключение, поскольку logger является нулевым, когда вызывается HandleError().

Регистратор успешно внедряется в саму службу и может использоваться там, но по какой-то причине я не могу использовать его в FaultHandler.

Обновление : Вот соответствующая часть файла конфигурации Windsor (отредактированная для защиты невинных):

<configuration>
  <components>
    <component id="Logger"
               service="Our.Namespace.IOurLogger, Our.Namespace"
               type="Our.Namespace.OurLogger, Our.Namespace"
    />
  </components>
</configuration>

1 Ответ

0 голосов
/ 21 октября 2009

Logger никогда не устанавливается для этого класса, поэтому вы получаете ошибку null ref. Можете ли вы поделиться своим файлом конфигурации, где вы устанавливаете зависимости?

...