Я разрабатываю набор сервисов с использованием 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>