首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非静态字段、方法或属性“Functions.telemetry”PocSendGrid需要对象引用。

非静态字段、方法或属性“Functions.telemetry”PocSendGrid需要对象引用。
EN

Stack Overflow用户
提问于 2018-06-21 07:32:17
回答 1查看 92关注 0票数 0

我有以下错误:

代码语言:javascript
复制
An object reference is required for the non-static field, method, or property 'Functions.telemetry' 

在以下代码中:

代码语言:javascript
复制
 private TelemetryClient telemetry = new TelemetryClient();
        // This function will get triggered/executed when a new message is written 
        // on an Azure Queue called sendgridqueue.
        public static async Task ProcessQueueMessageAsync([QueueTrigger("sendgridqueue")] string message, TextWriter log)
        {
            Message msg = JsonConvert.DeserializeObject<Message>(message);
            await Execute(msg, log);           
        }


        static async Task Execute(Message message, TextWriter log)
        {
            telemetry.TrackEvent("WinGame");


            log.WriteLine(String.Format("{0}: Message is being sent with subject {1}, to {2}, and body{3}", DateTime.Now, message.Subject, message.To.ToString(), message.HtmlBody));
            var client = new SendGridClient(ConfigurationManager.AppSettings["Sendgridapikey"]);
            var from = new EmailAddress(message.From);
            var subject = message.Subject;
            var to = new EmailAddress(message.To.ToString());
            var plainTextContent = message.PlainTextBody;
            var htmlContent = message.HtmlBody;
            var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
            var response = await client.SendEmailAsync(msg);
            log.WriteLine(String.Format("{0}: Message was sent with subject {1}, to {2}, and body{3}", DateTime.Now, message.Subject, message.To.ToString(), message.HtmlBody));

            log.WriteLine(String.Format("Message took: {0} between queueing and sending", (DateTime.Now - message.DateandTimeSent).TotalMilliseconds));

        }

但是,如果删除静态关键字,则会得到另一个错误,我不希望每次都实例化TelemetryClient。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 07:34:43

telemetry是一个实例变量--每次实例化该类时都会创建一个新变量。

您的方法是静态的-它们不能访问实例变量。

一个简单的解决方案就是在您的TelemetryClient方法中实例化Execute

代码语言:javascript
复制
static async Task Execute(Message message, TextWriter log)
{
    TelemetryClient telemetry = new TelemetryClient();
    telemetry.TrackEvent("WinGame");
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50962837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档