PostSharp - логгер как аргумент аспекта - PullRequest
1 голос
/ 05 августа 2020

Хотите использовать PostSharp диагностику с аспектом для обработки исключений, инкапсулированным в сборку библиотеки.

В то же время пытается настроить и инициализировать регистратор Serilog в сборке потребителя этой библиотеки диагностики.

[AspectTypeDependency(AspectDependencyAction.Order, AspectDependencyPosition.After,
  typeof(AddContextOnExceptionAttribute))]
[PSerializable]
public sealed class ReportAndSwallowExceptionAttribute : OnExceptionAspect
{
    public ILogger TheLogger { get; set; }

    public ReportAndSwallowExceptionAttribute(ILogger logger)
    {
        TheLogger = logger;
    }

    public override void OnException(MethodExecutionArgs args)
    {
        TheLogger.Error("Error happened ...");
    }
 }

В основном классе:

    class Program
    {
        // below line is the critical part which seems ILogger is not allowed
        [ReportAndSwallowException(Log.Logger)]
        public static void TryExceptionMethod()
        {
            throw new NotImplementedException();
        }
        
        static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                    .WriteTo.File(@"HERE\Logs\log-x.log", 
                     rollingInterval: RollingInterval.Day)
                     .CreateLogger();

            Console.WriteLine("Hello World!");
            TryExceptionMethod();

        }    

    }

Кажется, передача ILogger этому атрибуту является незаконной, как я могу реализовать этот сценарий?

Текущая ошибка:

Error   CS0181: Attribute constructor parameter 'logger' has type 'ILogger', which is not a valid attribute parameter type  

Думаю, для решения этой ошибки требуется константа, но главный вопрос - как реализовать этот сценарий: поместите регистратор в Потребительский проект имеет аспекты в библиотеке.

1 Ответ

2 голосов
/ 06 августа 2020

Самый простой вариант заключается в том, что ваш аспект напрямую ссылается на Log.Logger.

Есть несколько других более сложных параметров, которые описаны здесь: https://doc.postsharp.net/consuming-dependencies

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...