Я безрезультатно искал проблемы, похожие на ту, с которой столкнулся, поэтому приношу извинения, если на этот вопрос был дан ответ в другом месте. Я нашел многие, которые казались смежными, но ни один из ответов, которые я нашел до сих пор, не помог в моем конкретном контексте.
Я разрабатываю приложение Xamarin.Android, которое использует экземпляр приложения для хранения некоторых глобальных переменных. Вот мой класс приложения:
[Register("android/app/Application", DoNotGenerateAcw = true)]
public class MainApplication : Application
{
public VariablesModel Variables { get; set; }
public MainApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
Variables = new VariablesModel();
}
}
Обычно я могу получить доступ к этому экземпляру приложения изнутри действия (или контекста действия), выполнив следующие действия:
var application = (MainApplication)Application.Context;
var variables = application.Variables;
Это новая разработка, что первая строка из двух выше выдает System.InvalidCastException
при попытке привести к MainApplication
. Что меня особенно смущает, так это то, что у нас есть поставленные версии этого приложения, которые успешно используют приведенный выше код. Только сейчас в моей среде разработки я не могу заставить ее работать, даже когда я извлекаю эти предыдущие рабочие версии.
Единственное, что я могу думать, это то, что обновление Android SDK вызвало эту разницу в поведении, но мне еще предстоит найти какую-либо документацию (или увидеть какие-либо полезные исключения, кроме InvalidCast), которые помогут прояснить, что мне не хватает. MainApplication наследует Application
, и хотя Application.Context
указан как тип Context
, опять же, это приведение работало для меня в прошлом.
Есть что-то, что мне не хватает? Что мне нужно сделать, чтобы получить доступ к работающему экземпляру приложения?