none
Не отрабатывает [CallerMemberName] при обращении через интерфейс RRS feed

  • Вопрос

  • Добрый день!

    Столкнулся со странной ситуацией - в метод, вызываемый через интерфейс, не передаётся значение CallerMemberName. Делаю так.

    Класс Logger:

    using System.Runtime.CompilerServices;
    
    namespace PixWebResource.Logger
    {
        public class Logger : ILogger
        {
            private readonly ITracerService _tracer;
    
            public Logger(ITracerService tracer)
            {
                _tracer = tracer;
            }
    
            public void Info(string message, [CallerMemberName] string callerName = null)
            {
                _tracer.Trace(callerName, TracerEventKind.Info, $"({callerName}): {message}");
            }
    

    Интерфейс:

        public interface ILogger
        {
            void Info(string message, string callerName = null);
        }

    Регистрация в Autofac:

        public class WebApiApplication : System.Web.HttpApplication
        {
            public static IContainer ClassContainer;
    
            protected void Application_Start(object sender,
                EventArgs e)
            {
                var builder = new ContainerBuilder();
                // Register individual components
                var log = new TracerService(nameof(PixWebResource), $"{Environment.NewLine}Starting {nameof(PixWebResource)}");
    
                builder.Register(c => log).As<ITracerService>();
                builder.RegisterType<Logger.Logger>().As<ILogger>().SingleInstance();
                ClassContainer = builder.Build();
    
                ClassContainer.Resolve<ILogger>().Info($"{nameof(PixWebResource)} started");
            }
    

    Использование в ASMX.CS:

    public class PixWebResource : WebService
        {
            private ILogger _logger;
    
            public PixWebResource()
            {
                _logger = WebApiApplication.ClassContainer.Resolve<ILogger>();
            }
    
            [WebMethod]
            public string UploadImage(string tricepsUserid, string userId, string zippedImageData)
            {
                _logger.Info($"tricepsUserid = {tricepsUserid}, userId = {userId}");

    Результат в лог-файле:

    2019-09-09 12:15:57.2652 INFO 
    Starting PixWebResource
    2019-09-09 12:15:57.3892 INFO null > (): PixWebResource started
    2019-09-09 12:16:13.7831 INFO null > (): tricepsUserid = tr id, userId = user id

    Здесь примечательно значение null после INFO и пустые скобки - это то, что должно было приехать от вызывающего метода. То есть вместо null и в скобках д.б. строка "UploadImage". 

    Почему её нет, подскажите, плиз? Заранее спасибо.

    9 сентября 2019 г. 5:37