У меня есть служба заданий в моем приложении mvvmcross для Android форм, которое проверяет данные с сервера и создает новое уведомление, если это новое сообщение. Код для проверки новых сообщений находится в эксплуатации, поэтому мне нужно инициализировать mvvmcross IoC, но я получаю ошибку.
[Service(Exported = true, Permission = "android.permission.BIND_JOB_SERVICE")]
public class NotificationJobService : JobService
{
private static readonly string TAG = "ExampleJobService";
public override bool OnStartJob(JobParameters args)
{
Log.Info(TAG, "on start job: " + args.JobId);
DoBackgroundWork(args);
return true;
}
public override bool OnStopJob(JobParameters args)
{
return true;
}
private void DoBackgroundWork(JobParameters args)
{
new Thread(() =>
{
var setupSingleton = MvxAndroidSetupSingleton.EnsureSingletonAvailable(ApplicationContext);
setupSingleton.EnsureInitialized();
Mvx.IoCProvider.Resolve<INotificationService>().ShowNewPostNotification(new Newsfeed());
JobFinished(args, true);
}).Start();
}
}
[Activity(Label = "SurrenderAt20", MainLauncher = true, Theme = "@style/MainTheme", NoHistory = false, ScreenOrientation = ScreenOrientation.Portrait)]
public class MainActivity : MvxFormsAppCompatActivity<AndroidSetup, CoreApp, App>
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
StartJob();
}
void StartJob()
{
Class javaClass = Class.FromType(typeof(NotificationJobService));
ComponentName componentName = new ComponentName(this, javaClass);
JobInfo info = new JobInfo.Builder(123, componentName)
.SetMinimumLatency(20000)
.SetOverrideDeadline(25000)
.SetPersisted(true)
.Build();
JobScheduler jobScheduler = (JobScheduler)GetSystemService(JobSchedulerService);
int result = jobScheduler.Schedule(info);
if (result == JobScheduler.ResultSuccess)
{
Log.Info("MainActivity", "Job Sheduled");
}
else
{
Log.Info("MainActivity", "Job Filed Sheduled");
}
}
}
public sealed class AndroidSetup : MvxFormsAndroidSetup<CoreApp, App>
{
protected override void InitializeLastChance()
{
Mvx.IoCProvider.RegisterSingleton(typeof(IOperatingSystemService), new OperatingSystemService());
Mvx.IoCProvider.RegisterSingleton(typeof(IMasterDetailService), new MasterDetailService());
Mvx.IoCProvider.RegisterSingleton(typeof(INotificationService), new NotificationService());
Mvx.IoCProvider.ConstructAndRegisterSingleton<IMvxAppStart, MvxAppStart<RootPageViewModel>>();
base.InitializeLastChance(); //TODO remove (check if work)
}
}
MvvmCross.Exceptions.MvxException: не удалось создать экземпляр установки
---> MvvmCross.Exceptions.MvxException: не удалось найти класс установки для приложения в
MvvmCross.Core.MvxSetupExtensions.CreateSetup [TSetup] () [0x00019] в
<904768743fbc44a983fee28742390539>: 0 в
MvvmCross.Core.MvxSetup.Instance () [0x00015] в
<904768743fbc44a983fee28742390539>: 0 в
MvvmCross.Core.MvxSetupSingleton.CreateSetup () [0x00000] в
<904768743fbc44a983fee28742390539>: 0 --- конец внутреннего исключения
трассировка стека --- в MvvmCross.Core.MvxSetupSingleton.CreateSetup ()
[0x00017] в <904768743fbc44a983fee28742390539>: 0 в
MvvmCross.Core.MvxSetupSingleton.EnsureSingletonAvailable [TMvxSetupSingleton]
() [0x00045] в <904768743fbc44a983fee28742390539>: 0 в
MvvmCross.Platforms.Android.Core.MvxAndroidSetupSingleton.EnsureSingletonAvailable
(Android.Content.Context applicationContext) [0x00000] в
<904768743fbc44a983fee28742390539>: 0 в
Surrender_20.Forms.Services.NotificationJobService + <> c__DisplayClass3_0.b__0
() [0x0000b] в <3bf0784f2f454fc395358149cf734980>: 0 в
System.Threading.ThreadHelper.ThreadStart_Context (System.Object
состояние) [0x00014] в: 0 в
System.Threading.ExecutionContext.RunInternal
(System.Threading.ExecutionContext executeContext,
Обратный вызов System.Threading.ContextCallback, состояние System.Object,
System.Boolean preserveSyncCtx) [0x00071] в
: 0 в
System.Threading.ExecutionContext.Run
(System.Threading.ExecutionContext executeContext,
Обратный вызов System.Threading.ContextCallback, состояние System.Object,
System.Boolean preserveSyncCtx) [0x00000] в
: 0 в
System.Threading.ExecutionContext.Run
(System.Threading.ExecutionContext executeContext,
Обратный вызов System.Threading.ContextCallback, состояние System.Object)
[0x0002b] в: 0 в
System.Threading.ThreadHelper.ThreadStart () [0x00008] в
: 0