Я использую Castle Windsor в своем приложении, и я хотел бы использовать пример внедрения некоторых служб ILog в свой ExceptionFilterAttribute:
public class GenericExceptionFilterAttribute : ExceptionFilterAttribute
{
private readonly ILog _logger;
public GenericExceptionFilterAttribute()
{
}
public GenericExceptionFilterAttribute(ILogManager logManager)
{
_logger = logManager.GetLogger(typeof(GenericExceptionFilterAttribute));
}
}
Как я могу внедрить сервисы в этот класс?
Отношении
Carlos
2 ответа
Привет, dependencyResolver, чтобы решить эту проблему:
public override void OnException(HttpActionExecutedContext context)
{
var log= (ILog)context.ActionContext.ControllerContext.Configuration.DependencyResolver.GetService(typeof(ILog));
}
Webapi имеет интерфейс под названием IFilterProvider
, который может поддерживать поведение, которое вы ищете. Проверьте https://stackoverflow.com/a/18325433/4711454 или http://michael-mckenna.com/blog /dependency-injection-for-asp-net-web-api-action-filters-in-3-easy-steps примеры того, как это реализовать. Второй пример основан на Unity, но вы можете легко модифицировать его для реализации Castle Windsor. Я пробовал это решение некоторое время назад, и оно предоставляет средства для правильного внедрения конструктора в фильтры действий. В качестве альтернативы вы можете переключиться на перехватчики Castle Windsor. Я также попробовал это, создав перехватчик, который обрабатывал исключения для меня, и зарегистрировал его в замке Виндзор для перехвата элементов управления/действий, которые я хотел. Если вы сделаете еще один шаг вперед, вы можете расширить перехватчик, чтобы проверить перехваченный контроллер или метод действия для пользовательского атрибута (который вы можете создать самостоятельно) и выполнять обработку исключений только в том случае, если атрибут существует. Таким образом, вы можете просто назначить перехватчик всем контроллерам и управлять обработкой исключений на отдельных контроллерах/действиях, применяя атрибут при необходимости.
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.