我有以下错误:
An object reference is required for the non-static field, method, or property 'Functions.telemetry' 在以下代码中:
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。
发布于 2018-06-21 07:34:43
telemetry是一个实例变量--每次实例化该类时都会创建一个新变量。
您的方法是静态的-它们不能访问实例变量。
一个简单的解决方案就是在您的TelemetryClient方法中实例化Execute:
static async Task Execute(Message message, TextWriter log)
{
TelemetryClient telemetry = new TelemetryClient();
telemetry.TrackEvent("WinGame");
...https://stackoverflow.com/questions/50962837
复制相似问题