Получение вызывающего метода называет из метода [дубликат]

Прежде всего, добро пожаловать в SO!

Предоставляет ли Xamarin Forms такой способ сделать это?

blockquote>

Простой ответ (к сожалению): Нет. [ 115]

Если вы хотите повторно использовать ту же базу данных, которая хранится в Azure, с Xamarin Forms, вы должны предоставить API через Интернет, который взаимодействует с вашей базой данных Azure. Затем ваше приложение Xamarin Forms подключится к вашему API с помощью класса HttpClient для публикации / извлечения данных. Xamarin формы поддерживают локально ядро ​​базы данных SQLite, вот и все. Если необходимо, больше информации о локальной БД с формами Xamarin здесь .

Есть ли лучший подход, который я могу использовать (как новичок) для совместного использования одной и той же базы данных с двумя разными приложениями на двух разных платформах (настольный и мобильный телефон в моем случае)?

blockquote>

Лучшим подходом было бы однозначно представить веб-API, связанный с вашей базой данных Azure. В будущем ваше настольное И мобильное приложение (и любое другое приложение) будет называть вас методами ApiController, что означает, что это будет общий код для всех ваших приложений.

Ниже приведен типовой пример метода вызова API из форм Xamarin:

public static async Task GetData(string apiTarget)
{
      using (var client = new HttpClient())
      {
           //setup client
           client.BaseAddress = new Uri(_API_BASE_URI);
           client.MaxResponseContentBufferSize = 9999999; 
           client.DefaultRequestHeaders.Accept.Clear();
           client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _TOKEN);
           TResult _Result = default(TResult);
           //make request
           HttpResponseMessage response = await client.GetAsync(apiTarget).ConfigureAwait(false);
           if (response.IsSuccessStatusCode)
           {
               var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

               _Result = (TResult)JsonConvert.DeserializeObject(content);
           }
           return _Result;
      }
}

Удачного кодирования!

57
задан Community 23 May 2017 в 01:54
поделиться

5 ответов

Я не думаю, что это может быть сделано, не прослеживая стек. Однако довольно просто сделать это:

StackTrace stackTrace = new StackTrace();
MethodBase methodBase = stackTrace.GetFrame(1).GetMethod();
Console.WriteLine(methodBase.Name); // e.g.

Однако я думаю, что действительно необходимо остановиться и спросить себя, если это необходимо.

72
ответ дан jason 7 November 2019 в 05:41
поделиться

Это на самом деле действительно просто.

public void PopularMethod()
{
    var currentMethod = System.Reflection.MethodInfo
        .GetCurrentMethod(); // as MethodBase
}

, Но быть осторожным через, я немного скептически настроен тому, если встраивание метода имеет любой эффект. Можно сделать это, чтобы удостовериться, что JIT-компилятор не помешает.

[System.Runtime.CompilerServices.MethodImpl(
 System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
public void PopularMethod()
{
    var currentMethod = System.Reflection.MethodInfo
        .GetCurrentMethod();
}

Для получения вызывающего метода:

[System.Runtime.CompilerServices.MethodImpl(
 System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
public void PopularMethod()
{
    // 1 == skip frames, false = no file info
    var callingMethod = new System.Diagnostics.StackTrace(1, false)
         .GetFrame(0).GetMethod();
}
17
ответ дан John Leidegren 7 November 2019 в 05:41
поделиться

В то время как можно наиболее определенно проследить Стек и изобразить его тот путь, я убедил бы Вас заново продумать свой дизайн. Если бы Ваш метод должен знать о своего рода "состоянии", я сказал бы, просто создают перечисление или что-то, и берут это в качестве параметра к Вашему PopularMethod (). Что-то вдоль тех строк. На основе то, что Вы отправляете, прослеживая стек, было бы излишеством IMO.

1
ответ дан BFree 7 November 2019 в 05:41
поделиться

Просто передача в параметре

public void PopularMethod(object sender)
{

}

IMO: Если это достаточно хорошо для событий, это должно быть достаточно хорошо для этого.

5
ответ дан twip 7 November 2019 в 05:41
поделиться

Я думаю, что действительно необходимо использовать StackTrace класс и затем StackFrame.GetMethod() на следующем кадре.

Это походит на странную вещь использовать Reflection для все же. Если Вы определяете PopularMethod, не может пойти, определяют параметр или что-то для передачи информации, которую Вы действительно хотите. (Или вставленный на базовом классе или чем-то...)

0
ответ дан Irshad 7 November 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: